認可コード権限付与タイプ

この権限付与タイプは、認可サーバーをクライアント・アプリケーションとリソース所有者間の仲介として使用して認可コードを取得する場合は、この権限付与タイプを使用します。

次のダイアグラムに、認可コード権限付与タイプのフローを示します。

認可コード権限付与タイプのフローを示す図。
このOAuthフローでは、次のようになります。
  1. ユーザーはWebサーバー・クライアント・アプリケーションでリンクをクリックし、保護されているリソースへのアクセスをリクエストします。

  2. クライアント・アプリケーションは、認可コードのリクエストを使用して、認可エンドポイントoauth2/v1/authorizeにブラウザをリダイレクトします。

  3. 認可サーバーは、リソース所有者が承諾した後に、ブラウザ・リダイレクトを介してクライアント・アプリケーションに認可コードを返します。

  4. その後、クライアント・アプリケーションでは、認可コードをアクセス・トークンと交換します(多くの場合、リフレッシュ・トークン)。

  5. 認可サーバーは、アクセス・トークンをクライアント・アプリケーションに返します。

  6. クライアント・アプリケーションは、APIコールでアクセス・トークンを使用して、保護されているデータを取得します。
    ノート

    リソース所有者の資格証明はクライアントには公開されません。
機能 使用可能
クライアント認証が必要 いいえ
クライアントがユーザー資格証明を認識する必要があります。 いいえ
ブラウザベースのエンド・ユーザーとの対話 はい
認証のために外部アイデンティティ・プロバイダの使用が可能 はい
リフレッシュ・トークンを許可 はい
アクセス・トークンがエンド・ユーザーのコンテキスト内 はい

認可コード権限付与タイプの認可フローの例を参照してください。

承認コード付与タイプの承認フローの例

この認可フロー例では、認可コードを使用したOpenID Connectログイン・リクエストの流れを示しています。

このフローは、エンド・ユーザーに代わってアプリケーションがアイデンティティ・ドメインAPIを呼び出し、場合によってはユーザー承諾が必要になるシナリオを参照する、3レッグOAuthフローです。このフローでは、OAuth 2.0およびOpenID Connectを使用して、アイデンティティ・ドメインとカスタム・アプリケーションの間でフェデレーテッド・シングル・サインオンを構成する方法を示します。

アイデンティティ・ドメイン・コンソールで認可コード権限付与タイプを使用してアプリケーションを作成する場合:

  • アプリケーション・タイプとして「信頼できるアプリケーション」を指定します。

  • 権限付与タイプとして「Authorization Code」を選択します。

  • 認証リクエストへのレスポンスの送信先となる「リダイレクトURI」を指定します。

  • オプションで、リフレッシュ・トークンにアクセス・トークンとともに返すには、「Refresh Token」権限付与タイプを選択します。

認可コード権限付与タイプおよび認可フロー・ダイアグラムの詳細は、認可コード権限付与タイプを参照してください。

認可フロー

  1. ユーザーはWebサーバー・クライアント・アプリケーション(顧客見積)でリンクをクリックし、保護されているリソースへのアクセスをリクエストします。

  2. 顧客見積りアプリケーションは、認可コードのリクエストを使用して、ブラウザをアイデンティティ・ドメイン認可エンドポイント(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>'
  3. アイデンティティ・ドメインは、リクエストを受け取り、顧客見積システム(client_idで識別)がリソース所有者(スコープopenid).)の詳細情報を取得するために認可コードをリクエストしていることを識別します

  4. ユーザーがまだログインしていない場合は、IAMはユーザーの認証を試みます。IAMはユーザーの資格証明をチェックします。

  5. ログインに成功すると、IAMは認可コードとともにブラウザを顧客見積アプリケーションにリダイレクトします。
    ノート

    ユーザーが認証しない場合は、認可コードではなくエラーが返されます。
  6. 顧客見積アプリケーションは、認可コードを抽出し、その認可コードをアクセス・トークンに交換するためのリクエストをアイデンティティ・ドメインに対して実行します。

    リクエストの例: 機密/トラステッド・クライアント

       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>'

    mTLSを使用したリクエストの例

    secureDomainURLの取得方法については、「アクセス権限タイプ」を参照してください。

    curl -v \
    --cert cert.crt \
    --key key.key \
    --cacert ca.crt \
    --location '<secureDomainURL>/oauth2/v1/token' \
    --header 'Authorization: Basic <base64Encoded clientid:secret>'
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'grant_type=client_credentials' \
    --data-urlencode 'client_id=<client-id>' \
    --data-urlencode 'scope=urn:opc:idm:_myscopes_'
  7. IAMは、コード(client_id, client_secretおよび認可コード)に関連付けられた権限付与およびユーザー・データを検証します。

  8. 「アクセス・トークン」および「アイデンティティ・トークン」が返されます。アクセス・トークンには、ユーザーのかわりに顧客見積アプリケーションがリクエスト可能なスコープに関する情報が含まれます。アプリケーションでは、ユーザーのかわりにAPIをリクエストするときに、このトークンを使用できます。

    アイデンティティ・トークンは、openidスコープをリクエストした場合にのみ取得されます。このトークンにはユーザーのID情報が含まれ、フェデレーテッド認証で使用されます。

  9. 顧客見積アプリケーションによりid_tokenが処理され、IAMから返されたユーザーの情報が抽出されます

  10. 顧客見積によってホーム・ページが表示され、ユーザーに関する情報が表示されます。