注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このドキュメンテーションは、Foundry に接続するための OAuth2 クライアントを作成したい Foundry ユーザーまたは管理者向けに作成されました。このページでは、OAuth 2.0 認証フレームワーク の説明と、Foundry の OAuth2 の実装について詳しく説明しています。また、Foundry 第三者アプリケーション & API 利用規約 は、Foundry プラットフォーム上の第三者アプリケーションの利用を規定しており、第三者アプリケーションの作成者や管理者が理解するべき内容です。
OAuth2 認証フレームワークを利用すると、第三者アプリケーションがサービスへの制御されたアクセスを得ることができます。OAuth2 は、特別に発行されたアクセストークンとリフレッシュトークンを利用してクライアント(例えば、第三者アプリケーション)がアクセスをリクエストできるレイヤーを提供し、ユーザーの資格情報や静的な bearer トークンの代わりにすることで、従来のクライアント - サーバー認証モデルを改善します。OAuth2 は、アクセストークンを取得するための方法であるグラントを利用してこのアクセスを管理します。
以下のセクションでは、第三者アプリケーションで OAuth2 をサポートする方法について説明します。本書全体で、クライアント は第三者アプリケーションを、認証サーバー は Foundry の認証サーバーを、ユーザー は第三者アプリケーションのエンドユーザーを指します。
Foundry で OAuth2 を利用するには、第三者アプリケーションの登録の手順に従ってアプリケーションを登録し、次のサブセクションで説明する認証オプションのいずれかを選択する必要があります。
認証コードグラントを利用すると、クライアントは既存の Foundry ユーザーを代表して行動できます。アプリケーションは、必要な Foundry の権限のセットをリクエストし、その後 Foundry ユーザーが明示的にそのアカウント上でクライアントがこれらの権限にアクセスすることを承認する必要があります。Foundry では、クライアントが限定的なリソースセットに制限されるか、またはユーザーがアクセスできるすべてのリソースに制限されるかを選択できます。
認証コードグラントは以下のように動作します:
code_verifier
と code_challenge
を作成します。これは、クライアントシークレットを安全に保存できるサーバーベースのアプリケーションなどの 機密クライアント に対しては 推奨 されますが、必須ではありません。しかし、クライアントシークレットを安全に保存できないネイティブアプリなどの パブリッククライアント に対しては 必須 です。
code_verifier
は、A-Z、a-z、0-9、-
(ハイフン)、.
(ピリオド)、_
(アンダースコア)、~
(チルダ) を含む暗号学的にランダムな文字列で、長さは 43 から 128 文字です。code_challenge
は、code_verifier
の SHA256 を実行し、それをパディングなしの Base64-URL エンコード値に変換することで得られます。response_type
:これは code
に設定する必要があります。client_id
:これは Foundry で第三者アプリケーションが登録されたときに生成された ID に設定する必要があります。redirect_uri
:これは認証サーバーに、ユーザーがリクエストを承認した後にユーザーをリダイレクトする場所を伝えます。指定されなかった場合、Foundry の第三者アプリケーション設定の最初のリダイレクト URI 値がデフォルトとなります。scope
:これはリクエストされた権限を定義します。パブリック API のスコープは API ドキュメンテーション にあります。リフレッシュトークンを取得するには offline_access
スコープを追加します。複数のスコープを希望する場合は、スコープをスペースを区切り文字として連結します。state
:これはアプリケーションが生成したランダムな文字列で、そのままアプリケーションに返されます。アプリケーションは、返された値が元の文字列と一致することを確認するべきです。これにより CSRF 攻撃を防ぐことができます。code_challenge
:クライアントが code_challenge
を作成した場合、このパラメーターを設定する必要があります。認証サーバーは内部的に code_challenge
パラメーターと生成した認証コードを関連付けます。code_challenge_method
:これは S256
に設定する必要があります。code
:これは認証サーバーが生成する認証コードです。state
:これはクライアントが認証リクエストで送信したものと同じパラメーターです。クライアントはこれがリクエストで送信した元の state
パラメーターと一致することを確認する必要があります。application/x-www-form-urlencoded
形式を使用してリクエストボディに送信する必要があります:
grant_type
:これは authorization_code
に設定する必要があります。code
:認証サーバーから受け取ったコードです。redirect_uri
:ユーザーエージェントがリダイレクトされる絶対 URI です。client_id
:これは Foundry で第三者アプリケーションが登録されたときに生成された ID に設定する必要があります。code_verifier
:クライアントが code_verifier
を生成した場合、このリクエストでそれを送信する必要があります。認証サーバーは code_verifier
が前のリクエストで送信された code_challenge
と一致することを確認します。access_token
:クライアントがリクエストしたリソースにアクセスするために使用できるトークンです。token_type
:発行されたトークンのタイプです。expires_in
:アクセストークンの有効期限(秒)です。refresh_token
:これは要求されたスコープが offline_access
を含む場合にのみ返されます。クライアントがユーザーがリクエストを承認することなくアクセストークンを更新したい場合に使用します。詳細については、アクセストークンの更新 を参照してください。クライアント資格情報グラントは、クライアントが行うアクションが通常のFoundryユーザーに関連付けられない非対話型のサービスユーザースタイルのワークフロー用に設計されています。クライアントは通常のFoundryユーザーを代理で行動しません。
代わりに、このグラントタイプは、Foundryリソースにアクセスするための権限を付与できるクライアントに関連付けられたFoundryサービスユーザーを自動的に作成します。このグラントで取得したトークンは、作成されたサービスユーザーを代理でリソースにアクセスするために使用できます。サービスユーザーアカウントのユーザー名は、アプリケーションのクライアントIDと同じです。
デフォルトでは、サービスアカウントはどのリソースにもアクセスできません。Foundry管理者は、クライアントがFoundryでアクションを実行するために、サービスユーザーアカウントに必要な役割と権限を割り当てる必要があります。
クライアント資格情報グラントの動作は以下の通りです:
application/x-www-form-urlencoded
フォーマットを使用して送信する必要があります:
grant_type
:これはclient_credentials
に設定する必要があります。client_id
:これはFoundryでサードパーティアプリケーションが登録されたときに生成されたIDに設定する必要があります。client_secret
:これはFoundryでサードパーティアプリケーションが登録されたときに生成されたクライアントシークレットに設定する必要があります。access_token
:クライアントがリクエストしたリソースにアクセスするために使用できるトークン。token_type
:発行されたトークンのタイプ。expires_in
:アクセストークンの寿命(秒)。アクセストークンは一定時間経過すると期限が切れ、再取得する必要があります。ユーザーが存在しないときにFoundry APIにアクセスする必要がある任意のクライアントは、トークンを更新する必要があります。
これは以下の手順で行うことができます:
scope
パラメータの一部としてoffline_access
を指定します。refresh_token
を保存する必要があります。grant_type
:これはrefresh_token
に設定する必要があります。refresh_token
:以前に指定されたユーザーのために取得した再読み込みトークン。client_id
:これはFoundryでサードパーティアプリケーションが登録されたときに生成されたIDに設定する必要があります。client_secret
:これはFoundryでサードパーティアプリケーションが登録されたときに生成されたクライアントシークレットに設定する必要があります。access_token
クライアントがリクエストしたリソースにアクセスするために使用できるトークン。token_type
:発行されたトークンのタイプ。expires_in
:アクセストークンの寿命(秒)。refresh_token
:アクセストークンを更新するために使用できる再読み込みトークン。Foundryは、以前に発行された再読み込みトークンが使用されるたびに、再読み込みトークンをローテーションします。access_token
とrefresh_token
の両方を保存してください。再読み込みトークンは新しいアクセストークンを取得するために使用できます。Foundryは、以前に発行された再読み込みトークンが使用されるたびに、再読み込みトークンをローテーションすることで再読み込みトークンに関連するリスクを軽減します。 再利用検出保護メカニズムは、再読み込みトークンが初回使用から1分後に再利用された場合、このグラントから作成されたすべてのアクセストークンが無効になり、新たな認証フローが必要になることを保証します。 再利用が許可される1分間の間隔は、ネットワークエラーなどの可能性のある一時的なエラーを考慮したものです。また、30日以上古い非アクティブな再読み込みトークンは自動的に無効になります。これらの保護措置は、長期間有効な再読み込みトークンが存在しないことを確認し、潜在的に危険なトークンからのリスクを軽減します。
以下のエンドポイントは、OAuth2トークンを取得するために使用できます。
GET /multipass/api/oauth2/authorize
認証エンドポイントは、クライアントが認証コードを取得するために使用します。
パラメータ名 | タイプ | 説明 |
---|---|---|
response_type | String | これは code に設定する必要があります。 |
client_id | String | クライアントの一意の識別子。 |
redirect_uri | String | ユーザーエージェントがリダイレクトされる絶対URI。これはコントロールパネルで指定されたリダイレクトURIの一つと一致する必要があります。このURIにはManage Application画面に移動することで再度アクセスできます。 |
scope | String | リクエストされた権限の範囲。公開APIのスコープはAPI documentationにあり、スペースで区切られた文字列としてリストされるべきです。 |
state | String (optional) | サーバーに渡され、クライアントにそのまま返される任意の文字列。これによりクロスサイトリクエストフォージェリを防ぐことができます。 |
code_challenge | String (optional) | クライアントによって生成されたコードチャレンジ。Authorization Code Grant with Proof Key for Code Exchange (PKCE)で使用されます。 |
code_challenge_method | String (optional) | code_challenge が使用されている場合、これはS256 に設定する必要があります。 |
リクエストが成功すると、ユーザーのブラウザはサードパーティアプリケーション設定で指定されたリダイレクトURIまたはリクエストで渡されたリダイレクトURIにリダイレクトされます。リダイレクトリクエストURIには以下のクエリパラメータが含まれます:
パラメータ名 | タイプ | 説明 |
---|---|---|
code | String | 生成された認証コード。このコードは10分後に失効します。 |
state | String (optional) | 認証リクエストにstate パラメータが含まれていた場合、これはその正確な値を含みます。 |
POST /multipass/api/oauth2/token
トークンエンドポイントは、クライアントが認証グラントまたは再読み込みトークンを提示してアクセストークンを取得するために使用されます。
パラメータ名 | 説明 |
---|---|
Content-Type | application/x-www-form-urlencoded である必要があります。 |
パラメータ名 | タイプ | 説明 |
---|---|---|
grant_type | String | 値はauthorization_code 、refresh_token 、またはclient_credentials である必要があります。 |
code | String (optional) | 認証エンドポイントから受け取った認証コード。これはgrant_type がauthorization_code の場合に必要です。 |
refresh_token | String (optional) | これはgrant_type がrefresh_token のときに必要です。値は認証コードが取得された元のリクエストで取得したrefresh_token である必要があります。 |
redirect_uri | String (optional/required) | ユーザーエージェントがリダイレクトされる絶対URI。これは、認証リクエストでリダイレクトURIが指定された場合に必要です。 |
scope | String (optional) | リクエストされた権限の範囲。公開APIのスコープはAPI documentationにあり、スペースで区切られた文字列としてリストされるべきです。 |
client_id | String | クライアントの一意の識別子。 |
client_secret | String (optional) | アプリケーション登録時に発行されたアプリケーションのクライアントシークレット。これはgrant_type がclient_credentials の場合に必要です。 |
code_verifier | String (optional) | アプリケーションが認証リクエストの前に生成したPKCEリクエスト用のコード検証器。 |
レスポンスJSONには以下のフィールドがあります。
フィールド名 | タイプ | 説明 |
---|---|---|
access_token | String | リソースにアクセスするための資格情報。 |
token_type | String | 発行されたトークンのタイプ。 |
expires_in | String | アクセストークンの寿命(秒)。 |
refresh_token | String (optional) | 新しいアクセストークンを取得するための資格情報。Foundryはrefresh_token グラントが呼び出されるたびにrefresh_token をローテーションします。access_token とrefresh_token の両方を保存してください。 |
リクエストが失敗すると、アクセスリクエストが拒否された場合のみ、ユーザーのブラウザはリダイレクトされます。それ以外の場合、以下のフィールドを含むHTMLエラーページが返されます。
フィールド名 | タイプ | 説明 |
---|---|---|
error | String | 次のセクションで定義されているエラーコード。 |
error_description | String | エラーの人間が読める説明 |
エラーコード値 | 説明 |
---|---|
invalid_request | リクエストが無効でした。 |
unauthorized_client | クライアントは認証コードをリクエストする権限がありません。 |
access_denied | サーバーがリクエストを拒否しました。 |
unsupported_response_type | 提供されたレスポンスタイプはサポートされていません。 |
invalid_scope | リクエストされたスコープは無効、未知、または不正確でした。 |
server_error | 予期しないサーバーエラーがありました。 |