Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OCI IAM Identity Domains OpenID Connect認証連携設定(基...

OCI IAM Identity Domains OpenID Connect認証連携設定(基本編)/Identity Domain OpenID Connect(Basic)

OCI IAM Identity DomainとOpenID Connect対応アプリケーションにてOpenID Connectによる認証連携を行うための設定手順(Basic編)になります。

oracle4engineer

June 05, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. はじめに 本手順書により実現する構成イメージ Copyright © 2022, Oracle and/or its affiliates 3

    本手順書は下記構成を実現するためのOCI IAM Identity DomainでのOpenID Connect(認可コードフロー)による連携設定手順書 になります。 ※対象のアプリケーション(OpenID Connect対応)は構築済みとの前提となります。 ※対象アプリケーションとIdentity Domainにはユーザーが登録されている前提となります。 OCI IAM Identity Domain OP OpenID Connect (認可コードフロー)による連携 RP OpenID Connect対応 アプリケーション 利用者 アプリケーションへアクセスすると Identity Domainへリダイレクト 認証 OP:OpenID Provider OP:Relying Party
  2. アジェンダ Copyright © 2022, Oracle and/or its affiliates 4 1.

    OpenID Connect連携に必要なOCI IAM Identity Domain側での設定 ~機密アプリケーションの作成~ 2. OpenID Connectのフロー(概要)と利用するREST API概要
  3. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定 ~機密アプリケーションの作成~ Copyright © 2022, Oracle

    and/or its affiliates 6 1)OCIコンソール(https://www.oracle.com/jp/cloud/sign-in.html)にアクセスします。 テナント名(クラウド・アカウント名)を入力し「Next」を選択します。 アイデンティティ・ドメインの選択画面が表示される場合には、対象ドメイン(今回は「PoC_IdentityDomain01」)を選択し、 管理者のユーザー名/パスワードを入力しOCIコンソールにログインします。 ※ドメイン選択画面が表示されない環境はDefaultドメインのみ存在する環境になり、自動的に“Defaultドメイン”にログインすることになります。 ※環境によりドメイン選択画面は表示されません。
  4. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定 ~機密アプリケーションの作成~ Copyright © 2022, Oracle

    and/or its affiliates 7 2) OCIコンソールにログインした後、画面右上のアバターマークより 「アイデンティティ・ドメイン:{アイデンティティ・ドメイン名} 」を選択します。
  5. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定 ~機密アプリケーションの作成~ Copyright © 2022, Oracle

    and/or its affiliates 8 3)アイデンティティ・ドメイン詳細画面にて、ドメインURLをコピーして控えておきます。 ※このURLは後続の手順で利用します。
  6. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定 ~機密アプリケーションの作成~ Copyright © 2022, Oracle

    and/or its affiliates 9 4)アイデンティティ・ドメインの左側メニューより「アプリケーション」を選択し、「アプリケーションの追加」を選択します。 アプリケーションの追加画面にて「機密アプリケーション」を選択し、「ワークフローの起動」を選択します。
  7. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定 ~機密アプリケーションの作成~ Copyright © 2022, Oracle

    and/or its affiliates 10 5)名前、説明に適当な値を指定し、「次」を選択します。
  8. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定 ~機密アプリケーションの作成~ Copyright © 2022, Oracle

    and/or its affiliates 11 6)クライアント構成部分にて「このアプリケーションをクライアントとして今すぐ構成します」をチェックONにします。 認可部分の権限付与タイプにて「認可コード」をチェックONにします。
  9. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定 ~機密アプリケーションの作成~ Copyright © 2022, Oracle

    and/or its affiliates 12 7)同じ画面にて「HTTPSのURLを許可」をチェックONにします。 「リダイレクトURL」に認証後にリダイレクトするアプリケーションのURLを指定します。 画面下部の「次」を選択します。 ※必要に応じてログアウトURLやログアウト後のリダイレクトURLも指定します。
  10. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定 ~機密アプリケーションの作成~ Copyright © 2022, Oracle

    and/or its affiliates 13 8) Web層ポリシー部分にて「スキップして後で実行」をチェックONにし、「終了」を選択します。
  11. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定 ~機密アプリケーションの作成~ Copyright © 2022, Oracle

    and/or its affiliates 14 9)登録したアプリケーション詳細画面にて「アクティブ化」を選択します。 アクティブ化確認画面にて「アプリケーションのアクティブ化」を選択します。
  12. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定 ~機密アプリケーションの作成~ Copyright © 2022, Oracle

    and/or its affiliates 15 10)登録したアプリケーションがアクティブ化されたことを確認します。 画面をスクロールダウンし、Oauth構成の一般情報にある「クライアントID」と「クライアント・シークレット」を控えておきます。 ※この「クライアントID」と「クライアント・シークレット」は後続のREST APIを利用時に使用します。
  13. Copyright © 2022, Oracle and/or its affiliates OpenID Connectアプリケーションアクセス時のフロー(概要) 17

    ユーザー ブラウザ Identity Domain アプリケーション (OIDC対応) アプリケーションアクセス 認可コード要求 Identity Domainへリダイレクト https://{IdentityDomain URL}/authorize?・・・・ 認証要求 Identity Domainログイン画面 ID/パスワード指定 サインイン押下 認証 認可コード発行 アプリケーションへリダイレクト https://{アプリURL}?code=・・・・ 認可コード取得 IDトークン要求 POST /oauth2/v1/token IDトークン/アクセス・トークン発行 IDトークン検証 ユーザー情報要求 GET /oauth2/v1/userinfo ユーザー情報提供 ログイン処理 アプリケーション画面(ログイン後画面) 必要に応じて 概要2. 概要3. 概要4. 概要5. OpenID Connect構成情報取得 GET /.well-known/openid-configuration 概要1. OpenID Connect構成情報送付 必要に応じて
  14. Copyright © 2022, Oracle and/or its affiliates 利用するREST APIの概要説明 –

    概要1. 18 【メソッド】 GET 【エンドポイント】 https://{上記1で控えたIdentity DomainのURL}/.well-known/openid-configuration ・Identity DomainのOpenID Connectの各種エンドポイント等の構成情報を取得する場合には下記REAT APIを利用します。 ユーザー ブラウザ Identity Domain アプリケーション (OIDC対応) OpenID Connect構成情報取得 GET /.well-known/openid-configuration 概要1. OpenID Connect構成情報送付 必要に応じて ⇒レスポンス { "issuer": "https://identity.oraclecloud.com/", "authorization_endpoint": "https://{上記1で控えたIdentity DomainのURL}/oauth2/v1/authorize", "token_endpoint": "https://{上記1で控えたIdentity DomainのURL}/oauth2/v1/token", "userinfo_endpoint": "https://{上記1で控えたIdentity DomainのURL}/oauth2/v1/userinfo", ・・・・・・・・・・・・・・ (参考ドキュメント) https://docs.oracle.com/cd/E83857_01/paas/identity-cloud/rest-api/op-well-known-openid-configuration-get.html
  15. Copyright © 2022, Oracle and/or its affiliates 利用するREST APIの概要説明 –

    概要2. 19 ユーザー ブラウザ Identity Domain アプリケーション (OIDC対応) アプリケーションアクセス 認可コード要求 Identity Domainへリダイレクト https://{IdentityDomain URL}/authorize?・・・・ 概要2. https://{上記1で控えたIdentity DomainのURL}/oauth2/v1/authorize? client_id={上記1で作成した機密アプリケーションのクライアントID} &redirect_uri={上記1で作成した機密アプリケーションに指定したリダイレクトURL} &response_type=code &scope=openid ・アプリケーションからの認可コード要求は下記URLをコールします。 (例) https://idcs-d4XXXX0e5.identity.oraclecloud.com/oauth2/v1/authorize?client_id=f65XXXXX872&redirect_uri=http%3A%2F%2Flocalhost%3A3001&response_type=code&scope=openid (注意事項) スコープには必ず”openid"を含めるようにします。 Email情報や電話番号情報も取得したい場合には「scope=openid+email+phone」と指定します。 (参考ドキュメント) https://docs.oracle.com/cd/E83857_01/paas/identity-cloud/rest-api/openidconnectauthcode.html
  16. Copyright © 2022, Oracle and/or its affiliates 利用するREST APIの概要説明 –

    概要3. 20 https://{上記1で作成した機密アプリケーションに指定したリダイレクトURL}?code={発行された認可コード} ・Identity Domainでの認証が完了すると、下記のように認可コードが付与された状態で機密アプリケーションに指定した リダイレクトURLに遷移します。 リダイレクト先アプリケーションにて、後続のIDトークン/アクセストークン要求のためこの認可コード(code値)を取得します。 ユーザー ブラウザ Identity Domain アプリケーション (OIDC対応) (参考ドキュメント) https://docs.oracle.com/cd/E83857_01/paas/identity-cloud/rest-api/openidconnectauthcode.html 認可コード発行 アプリケーションへリダイレクト https://{アプリURL}?code=・・・・ 認可コード取得 概要3. (例) https://XXXXXXX:3001?code=AgAgMjNiMDQ・・・・・・・・・・・・・・・T6h2NV1_C5s=
  17. Copyright © 2022, Oracle and/or its affiliates 利用するREST APIの概要説明 –

    概要4. 21 【メソッド】 POST 【エンドポイント】 https://{上記1で控えたIdentity DomainのURL}/oauth2/v1/token 【Header】 Content-Type: application/x-www-form-urlencoded Authorization: Basic {上記1にて作成した機密アプリのクライアントID:クライアントシークレットのBase64エンコード値(※1)} 【Body】 grant_type=authorization_code&code={上記の詳細3で取得した認可コード(code値)} ・アプリケーションより、概要3で取得した認可コードをもとにIDトークン/アクセストークンを要求するため下記のREST APIをコールし、 レスポンスよりIDトークン(id_token)やアクセス・トークン(access_token)を取得します。 ユーザー ブラウザ Identity Domain アプリケーション (OIDC対応) IDトークン要求 POST /oauth2/v1/token IDトークン/アクセス・トークン発行 IDトークン検証 概要4. ※1 機密アプリのクライアントID:クライアントシークレットのBase64エンコードの方法については後続ページ参照 ⇒レスポンス { "access_token": "eyJr............Ao8A", "token_type": "Bearer", "id_token": "eyJr............vMZQ", "expires_in": 3600 } (参考ドキュメント) https://docs.oracle.com/cd/E83857_01/paas/identity-cloud/rest-api/openidconnectauthcode.html
  18. Copyright © 2022, Oracle and/or its affiliates 利用するREST APIの概要説明 –

    概要4. (補足) 22 IDトークン/アクセストークン取得時に指定する{機密アプリのクライアントID:クライアントシークレットのBase64エンコード値}の生成方法 2) ローカルPC上でコマンドプロンプトを開き、下記コマンドを実行しクライアントID:クライアント・シークレットのBase64でのエンコードを行います。 certutil -encode {上記にて作成したテキストファイル名} {Base64エンコード後のファイル名} 3) Base64エンコードしたファイルを開き値を取得します。 途中に改行がある場合には改行を削除します。 1) テキストエディタにて、上記1にて控えた機密アプリケーションの「クライアントID」と「クライアント・シークレット」をコロンで繋いだ形式で保存します。 ※最後に改行をしないようにします。
  19. Copyright © 2022, Oracle and/or its affiliates 利用するREST APIの概要説明 –

    概要5. 23 【メソッド】 GET 【エンドポイント】 https://{上記1で控えたIdentity DomainのURL} /oauth2/v1/userinfo 【Header】 Content-Type: application/x-www-form-urlencoded Authorization: Bearer {上記4にて取得したアクセス・トークン(access_token)} ・アプリケーションより、ログインユーザーの情報を取得するため、概要4で取得したアクセス・トークンを用いて下記のREST APIをコールします。 ユーザー ブラウザ Identity Domain アプリケーション (OIDC対応) ⇒レスポンス { "birthdate": "", "family_name": "test", "gender": "", "given_name": "user001", "name": "user001 test", "preferred_username": "test001", "sub": "test001", "updated_at": 1670827316, "website": "" } (参考ドキュメント) https://docs.oracle.com/cd/E83857_01/paas/identity-cloud/rest-api/openidconnectauthcode.html ユーザー情報要求 GET /oauth2/v1/userinfo ユーザー情報提供 必要に応じて 概要5.