Drone CI 中文文档

Admission(访问准入控制)

你可以使用一个 admission 扩展在你的 Drone 实例上应用自定义访问控制逻辑。例如,我们创建了一个 admission 扩展参考,它根据组织和团队成员资格授予系统访问权限。

扩展配置

你可以通过向 Drone 服务器提供以下配置参数来注册一个 admission 扩展:

  • DRONE_ADMISSION_PLUGIN_ENDPOINT
    提供用于向 admission 扩展发起 HTTP 请求的端点(endpoint)。
  • DRONE_ADMISSION_PLUGIN_SECRET
    提供用于对 admission 扩展的 HTTP 请求进行身份验证的令牌。这个令牌是 Drone Server 和扩展之间共享的。

扩展工作原理

在登录流程中,Drone Server 向 admission 扩展发起 HTTP POST 请求。预期 admission 扩展将授予或拒绝用户对系统的访问权限,并且还可以(可选地)授予用户对系统的管理访问权限。

扩展请求响应

Admission 扩展将接收一个 HTTP 请求以授权用户。请求正文以 JSON 格式包含用户详细信息和事件类型。事件类型区分现有用户登录和新用户注册。

以下是请求体的定义:

1
2
3
4
class Request {
  event: Event;
  user: User;
}
1
2
3
4
5
6
class User {
    id: int64;
  login: string;
  email: string;
  admin: boolean;
}
1
2
3
4
enum Event {
  login,
  register
}

以下是请求正文的示例:

1
2
3
4
5
6
{
  "id": 1,
  "login": "octocat",
  "email": "octocat@github.com",
  "admin": false
}

扩展请求响应

Admission 扩展应该以以下一种方式之一进行响应:

返回 403 响应代码,表示用户未被授权登录。 返回 204 响应代码,表示用户已被授予访问权限。 返回 200 响应代码,并带有一个 JSON 编码的用户对象,以授予用户访问权限并授予或撤销管理特权。

以下是响应体的定义:

1
2
3
4
class User {
  login: string;
  admin: boolean;
}

以下是响应正文的示例:

1
2
3
4
  {
    "login": "octocat",
    "admin": false
  }

扩展请求鉴权

HTTP 请求根据 HTTP 签名规范草案使用共享 Secret 进行签名。请求接收者应该使用签名来验证 WebHook 的真实性和完整性。

起始项目 (模板)

如果你有兴趣创建一个 Admission 扩展,我们建议使用我们的起始项目模板作为基础来启动开发。