認可コード権限付与タイプ
認可サーバーをアイデンティティ・ドメインを使用するクライアント・アプリケーションとリソース所有者間の仲介として使用して認可コードを取得する場合は、この権限付与タイプを使用します。
次のダイアグラムに、認可コード権限付与タイプのフローを示します。
ユーザーはWebサーバー・クライアント・アプリケーションでリンクをクリックし、保護されているリソースへのアクセスをリクエストします。
クライアント・アプリケーションは、認可コードのリクエストを使用して、認可エンドポイント
oauth2/v1/authorize
にブラウザをリダイレクトします。認可サーバーは、リソース所有者が承諾を与えた後、ブラウザのリダイレクトを介してクライアント・アプリケーションに認可コードを返します。
その後、クライアント・アプリケーションは認可コードをアクセス・トークン(多くの場合、リフレッシュ・トークン)と交換します。
認可サーバーは、クライアント・アプリケーションにアクセス・トークンを返します。
- クライアント・アプリケーションは、APIコールでアクセス・トークンを使用して、保護されているデータを取得します。ノート
リソース所有者の資格証明はクライアントには公開されません。
機能 | 選択可能 |
---|---|
クライアントの認証が必要 | いいえ |
ユーザー資格証明をクライアントに認識させる必要があります。 | いいえ |
ブラウザベースのエンド・ユーザーとの対話 | はい |
認証のために外部アイデンティティ・プロバイダの使用が可能 | はい |
リフレッシュ・トークンを許可 | はい |
アクセス・トークンがエンド・ユーザーのコンテキスト内 | はい |
認可コード付与タイプの認可フローの例を参照してください。
認可コード権限付与タイプの認可フローの例
この認可フロー例では、認可コードを使用したOpenID Connectログイン・リクエストの流れを示しています。
このフローは、エンド・ユーザーのかわりにアプリケーションがアイデンティティ・ドメインAPIを呼び出し、場合によってはユーザー承諾が必要になるシナリオを参照する、3レッグのOAuthフローです。このフローは、OAuth 2.0およびOpenID Connectを使用して、アイデンティティ・ドメインとカスタム・アプリケーションの間でフェデレーテッド・シングル・サインオンを構成する方法を示しています。
アイデンティティ・ドメイン・コンソールで認可コード権限付与タイプを使用してアプリケーションを作成する場合:
-
アプリケーションのタイプとして「信頼できるアプリケーション」を指定します。
-
権限付与タイプとして「認可コード」を選択します。
-
認証リクエストへのレスポンスの送信先になる「リダイレクトURI」を指定します。
-
オプションで、リフレッシュ・トークンをアクセス・トークンで返すには、「Refresh Token」権限付与タイプを選択します。
認可コード権限付与タイプおよび認可フロー・ダイアグラムの詳細は、認可コード権限付与タイプを参照してください。
承認フロー
-
ユーザーはWebサーバー・クライアント・アプリケーション(顧客見積)でリンクをクリックし、保護されているリソースへのアクセスをリクエストします。
-
顧客見積アプリケーションは、認可コードのリクエストを使用して、アイデンティティ・ドメイン認可エンドポイント
(oauth2/v1/authorize)
にブラウザをリダイレクトします。リクエストURLには、リクエストされているアクセスのタイプを示す問合せパラメータが含まれます。ノート
nonce値は、インターセプトされたレスポンスが再利用されないようにするために使用する、暗号化された強力なランダム文字列です。リクエストの例: 機密/トラステッド・クライアント
GET https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234
リクエストの例: 機密/トラステッド・クライアント(リクエストにリフレッシュ・トークンを含む)
GET https://<domainURL>/oauth2/v1/authorize?client_id=<client-id&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid%20<Resource Server Scope>%20offline_access&nonce=<nonce-value>&state=1234
リクエストの例
GET https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234
PKCEを使用したリクエストの例
GET https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234&code_challenge=<code-challenge>&code_challenge_method=<plain|S256>'
-
アイデンティティ・ドメインは、リクエストを受信し、顧客見積アプリケーション(
client_id
で識別)がリソース所有者(スコープopenid).
)の詳細情報を取得するために認可コードをリクエストしていることを識別します -
ユーザーがまだログインしていない場合、IAMはユーザーの認証にチャレンジします。IAMはユーザーの資格証明をチェックします。
-
ログインに成功すると、IAMは認可コードとともにブラウザを顧客見積アプリケーションにリダイレクトします。ノート
ユーザーが認証しない場合は、認可コードではなくエラーが返されます。 -
顧客見積アプリケーションは、認可コードを抽出し、その認可コードとアクセス・トークンを交換するためのリクエストをアイデンティティ・ドメインに対して実行します。
リクエストの例: 機密/トラステッド・クライアント
curl -i -H 'Authorization: Basic <base64-clientid-secret>' -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<domainURL>/oauth2/v1/token -d 'grant_type=authorization_code&code=<authz-code>'
リクエストの例: パブリック・クライアント
curl -i -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<domainURL>/oauth2/v1/token -d 'grant_type=authorization_code&code=<authz-code>&redirect_uri=<client-redirect-uri>&client_id=<client-id>'
PKCEを使用したリクエストの例
curl -i -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<domainURL>/oauth2/v1/token -d 'grant_type=authorization_code&code=<authz-cod>e&redirect_uri=<client-redirect-uri>&client_id=<client-id>&code_verifier=<code-verifier>'
-
IAMは、コード(
client_id, client_secret
および認可コード)に関連付けられた付与およびユーザー・データを検証します。 -
アクセス・トークンおよびアイデンティティ・トークンが返されます。アクセス・トークンには、ユーザーのかわりに顧客見積アプリケーションがリクエスト可能なスコープに関する情報が含まれます。アプリケーションでは、ユーザーのかわりにAPIをリクエストするときに、このトークンを使用できます。
アイデンティティ・トークンが取得されるのは、
openid
スコープをリクエストした場合のみです。このトークンにはユーザーのID情報が含まれ、フェデレーション認証で使用されます。 -
顧客見積アプリケーションにより
id_token
が処理され、IAMから返されたユーザーが抽出されます。 -
顧客見積によってホーム ページが表示され、ユーザーに関する情報が表示されます。