Alibaba Cloud DevOps は OAuth 2.0 認可サーバーとして機能し、サードパーティアプリケーションが Proof Key for Code Exchange (PKCE) 付きの認可コードフローを通じて、認可されたユーザーに代わってリソース へアクセスできるようにします。
認可フローの概要
サードパーティアプリケーションは、ユーザーの認証情報を扱うことなく、認可コードフローを使用してアクセス トークンを取得します。発行されたアクセス トークンには、認可を行ったユーザーと同等のリソースアクセス権限が付与されます。次のシーケンスは、Alibaba Cloud DevOps でのフローの動作を示します:
クライアントの登録 — 動的クライアント登録 (DCR) エンドポイントを使用して client_id を自動的に取得します。Alibaba Cloud DevOps はパブリッククライアントのみをサポートするため、事前登録や client_secret は不要です。
ユーザー認可の要求 — ユーザーを認可エンドポイントに誘導します。ユーザーがログインして認可を付与すると、認可コードが発行されます。
コードをトークンに交換 — 認可コードと PKCE の code_verifier をトークンエンドポイントに送信します。Alibaba Cloud DevOps はアクセス トークン (有効期間:24 時間) とリフレッシュ トークン (有効期間:90 日) を返します。
トークンの更新 — アクセス トークンの有効期限が切れる前に、リフレッシュ トークンをトークンエンドポイントで使用して、新しいアクセス トークンを取得します。
サポートされる機能
機能 | 詳細 |
認可フロー | 認可コードフロー (authorization_code)。refresh_token をサポート |
クライアントタイプ | パブリッククライアントのみ。token_endpoint_auth_method は none のみをサポート。client_secret は発行されません |
PKCE | 必須。code_challenge_method は S256 のみをサポート |
動的クライアント登録 (DCR) | サポート。事前登録を必要とせず、クライアントは client_id を自動的に受け取ります |
メタデータ検出 | 認可サーバーメタデータ検出と保護されたリソースのメタデータ検出をサポート |
トークン形式 | 不透明トークン (非 JSON Web Token (JWT))。アクセス トークンは oat-、リフレッシュ トークンは ort- のプレフィックスが付きます |
トークンの有効期間 | アクセス トークン:24 時間。リフレッシュ トークン:90 日 |
サポートされない機能
機能 | 説明 |
クライアントクレデンシャルフロー (client_credentials) | ユーザーが関与しないマシン間の認可はサポートされません |
リソースオーナーパスワードフロー (password) | サポートされません |
インプリシットフロー (implicit) | サポートされません |
プレーン PKCE | サポートされません。S256 のみが受け付けられます |
コンフィデンシャルクライアント / client_secret | 発行も検証もされません |
トークンイントロスペクションエンドポイント、トークン失効エンドポイント | 外部には公開されません |
スコープベースの権限制限 | サポートされません。トークンの権限は認可を行ったユーザーの権限と同等です。scope はメタデータとしてのみ保存されます |
エンドポイントリファレンス
エンドポイント URL はハードコードせず、メタデータ検出で取得してください。認可エンドポイントとトークンエンドポイントは、異なるドメインに存在する場合があります。
エンドポイント | パス | メソッド | 認証 | 説明 |
認可サーバーメタデータ | /.well-known/oauth-authorization-server
| GET | 匿名 | エンドポイント URL を検出します |
保護されたリソースのメタデータ | /.well-known/oauth-protected-resource
| GET | 匿名 | 対応する認可サーバーを取得します |
動的クライアント登録 | /v1/oauth2/register
| POST | 匿名 | クライアントを登録し、client_id を取得します |
認可エンドポイント | /v1/oauth2/authorize
| GET / POST | ユーザー ログイン | ユーザーが認可を付与し、認可コードが発行されます |
トークンエンドポイント | /v1/oauth2/token
| POST | パブリッククライアント (匿名) | 認可コードをトークンに交換するか、トークンを更新します |
認可サーバーメタデータのレスポンスフィールド
/.well-known/oauth-authorization-server エンドポイントは、次のフィールドを返します:
フィールド | 値 |
issuer
| 発行者 (サイトにより異なります) |
authorization_endpoint
| 認可エンドポイント URL (トークンエンドポイントとドメインが異なる場合があります) |
token_endpoint
| トークンエンドポイント URL |
registration_endpoint
| 動的登録エンドポイント URL |
response_types_supported
| ["code"]
|
grant_types_supported
| ["authorization_code", "refresh_token"]
|
code_challenge_methods_supported
| ["S256"]
|
token_endpoint_auth_methods_supported
| ["none"]
|
説明 メタデータ レスポンスには scopes_supported、jwks_uri、introspection_endpoint、revocation_endpoint は含まれません。レスポンスには Cache-Control: public, max-age=3600 が含まれます。
保護されたリソースのメタデータのレスポンスフィールド
/.well-known/oauth-protected-resource エンドポイントは、次のフィールドを返します:
フィールド | 説明 |
resource
| 保護されたリソース識別子 |
authorization_servers
| このリソースに関連付けられた認可サーバー URL のリスト |
サイト
認可サービスは、センターサイトとリージョンサイトでそれぞれ独立して提供されます。2 つのサイトは分離されているため、client_id の値とトークンはサイト間で相互に利用できません。
サイト | サービス URL |
センターサイト | https://openapi-rdc.aliyuncs.com
|
リージョンサイト | インスタンスのアクセス ドメイン (コンソールのインスタンス設定で確認できます) |