アドミッション拡張機能
アドミッション拡張機能を使用して、カスタムアクセス制御ロジックをDroneインスタンスに適用できます。たとえば、組織とチームのメンバーシップに基づいてシステムアクセスを許可するリファレンスアドミッション拡張機能を作成しました。
構成
Droneサーバに次の構成パラメータを提供することにより、アドミッション拡張を登録できます。
- DRONE_ADMISSION_PLUGIN_ENDPOINT
アドミッション拡張へのhttp要求を行うために使用されるエンドポイントを提供します。 - DRONE_ADMISSION_PLUGIN_SECRET
アドミッション拡張へのhttp要求の認証に使用されるトークンを提供します。このトークンは、サーバと拡張機能の間で共有されます。
使い方
サーバは、ログインフロー中にアドミッション拡張機能にHTTPポストを作成します。アドミッション拡張は、システムへのユーザーアクセスを許可または拒否することが期待されており、(オプションで)ユーザーにシステムへの管理アクセスを許可することもできます。
リクエスト
アドミッション拡張機能は、ユーザーを承認するためのHTTPリクエストを受け取ります。リクエストの本文には、JSON 形式のユーザーの詳細とイベントタイプが含まれます。イベントは、既存のユーザーログインと新規ユーザー登録を区別します。
リクエストボディの定義:
1 class Request {
2 event: Event;
3 user: User;
4 }
1 class User {
2 id: int64;
3 login: string;
4 email: string;
5 admin: boolean;
6 }
1 enum Event {
2 login,
3 register
4 }
リクエスト本文の例:
1 {
2 "id": 1,
3 "login": "octocat",
4 "email": "octocat@github.com",
5 "admin": false
6 }
レスポンス
アドミッション拡張は、次のいずれかで応答する必要があります。
403
レスポンスコード:ユーザーがログインを許可されていないことを示す204
レスポンスコード:ユーザーにアクセスが許可されていることを示す200
レスポンスコード:JSONでエンコードされたUserオブジェクトを含み、ユーザーにアクセスを許可し、管理者権限を付与または取り消す
レスポンスの定義:
1 class User {
2 login: string;
3 admin: boolean;
4 }
レスポンス例:
1 {
2 "login": "octocat",
3 "admin": false
4 }
承認
httpリクエストは、共有シークレットを使用するhttp signaturesドラフト仕様に従って署名されます。受信者は、署名を使用してウェブフックの信頼性と整合性を検証する必要があります。
スタータープロジェクト
アドミッション拡張機能の作成に興味がある場合は、スタータープロジェクトをベースとして開発を開始することをお勧めします。