OCI IAM Identity DomainとOpenID Connect対応アプリケーションにてOpenID Connectによる認証連携を行うための設定手順(Basic編)になります。
OCI IAM Identity DomainsOpenID Connectによる連携設定手順(Basic編)2022年12月12日日本オラクル株式会社
View Slide
Safe harbor statement以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することを確約するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリース、時期及び価格については、弊社の裁量により決定され、変更される可能性があります。Copyright © 2022, Oracle and/or its affiliates2
はじめに本手順書により実現する構成イメージCopyright © 2022, Oracle and/or its affiliates3本手順書は下記構成を実現するためのOCI IAM Identity DomainでのOpenID Connect(認可コードフロー)による連携設定手順書になります。※対象のアプリケーション(OpenID Connect対応)は構築済みとの前提となります。※対象アプリケーションとIdentity Domainにはユーザーが登録されている前提となります。OCI IAMIdentity DomainOP OpenID Connect(認可コードフロー)による連携RP OpenID Connect対応アプリケーション利用者アプリケーションへアクセスするとIdentity Domainへリダイレクト認証OP:OpenID Provider OP:Relying Party
アジェンダCopyright © 2022, Oracle and/or its affiliates41. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~2. OpenID Connectのフロー(概要)と利用するREST API概要
1. OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~Copyright © 2022, Oracle and/or its affiliates5
OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~Copyright © 2022, Oracle and/or its affiliates61)OCIコンソール(https://www.oracle.com/jp/cloud/sign-in.html)にアクセスします。テナント名(クラウド・アカウント名)を入力し「Next」を選択します。アイデンティティ・ドメインの選択画面が表示される場合には、対象ドメイン(今回は「PoC_IdentityDomain01」)を選択し、管理者のユーザー名/パスワードを入力しOCIコンソールにログインします。※ドメイン選択画面が表示されない環境はDefaultドメインのみ存在する環境になり、自動的に“Defaultドメイン”にログインすることになります。※環境によりドメイン選択画面は表示されません。
OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~Copyright © 2022, Oracle and/or its affiliates72) OCIコンソールにログインした後、画面右上のアバターマークより「アイデンティティ・ドメイン:{アイデンティティ・ドメイン名} 」を選択します。
OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~Copyright © 2022, Oracle and/or its affiliates83)アイデンティティ・ドメイン詳細画面にて、ドメインURLをコピーして控えておきます。※このURLは後続の手順で利用します。
OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~Copyright © 2022, Oracle and/or its affiliates94)アイデンティティ・ドメインの左側メニューより「アプリケーション」を選択し、「アプリケーションの追加」を選択します。アプリケーションの追加画面にて「機密アプリケーション」を選択し、「ワークフローの起動」を選択します。
OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~Copyright © 2022, Oracle and/or its affiliates105)名前、説明に適当な値を指定し、「次」を選択します。
OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~Copyright © 2022, Oracle and/or its affiliates116)クライアント構成部分にて「このアプリケーションをクライアントとして今すぐ構成します」をチェックONにします。認可部分の権限付与タイプにて「認可コード」をチェックONにします。
OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~Copyright © 2022, Oracle and/or its affiliates127)同じ画面にて「HTTPSのURLを許可」をチェックONにします。「リダイレクトURL」に認証後にリダイレクトするアプリケーションのURLを指定します。画面下部の「次」を選択します。※必要に応じてログアウトURLやログアウト後のリダイレクトURLも指定します。
OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~Copyright © 2022, Oracle and/or its affiliates138) Web層ポリシー部分にて「スキップして後で実行」をチェックONにし、「終了」を選択します。
OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~Copyright © 2022, Oracle and/or its affiliates149)登録したアプリケーション詳細画面にて「アクティブ化」を選択します。アクティブ化確認画面にて「アプリケーションのアクティブ化」を選択します。
OpenID Connect連携に必要なOCI IAM Identity Domain側での設定~機密アプリケーションの作成~Copyright © 2022, Oracle and/or its affiliates1510)登録したアプリケーションがアクティブ化されたことを確認します。画面をスクロールダウンし、Oauth構成の一般情報にある「クライアントID」と「クライアント・シークレット」を控えておきます。※この「クライアントID」と「クライアント・シークレット」は後続のREST APIを利用時に使用します。
2. OpenID Connectのフロー(概要)と利用するREST API概要Copyright © 2022, Oracle and/or its affiliates16
Copyright © 2022, Oracle and/or its affiliatesOpenID Connectアプリケーションアクセス時のフロー(概要)17ユーザー ブラウザ Identity Domainアプリケーション(OIDC対応)アプリケーションアクセス認可コード要求Identity Domainへリダイレクト https://{IdentityDomain URL}/authorize?・・・・認証要求Identity Domainログイン画面ID/パスワード指定サインイン押下 認証認可コード発行アプリケーションへリダイレクト https://{アプリURL}?code=・・・・認可コード取得IDトークン要求POST /oauth2/v1/tokenIDトークン/アクセス・トークン発行IDトークン検証ユーザー情報要求GET /oauth2/v1/userinfoユーザー情報提供ログイン処理アプリケーション画面(ログイン後画面)必要に応じて概要2.概要3.概要4.概要5.OpenID Connect構成情報取得GET /.well-known/openid-configuration概要1.OpenID Connect構成情報送付必要に応じて
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
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
Copyright © 2022, Oracle and/or its affiliates利用するREST APIの概要説明 – 概要3.20https://{上記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=
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-urlencodedAuthorization: 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/tokenIDトークン/アクセス・トークン発行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
Copyright © 2022, Oracle and/or its affiliates利用するREST APIの概要説明 – 概要4. (補足)22IDトークン/アクセストークン取得時に指定する{機密アプリのクライアントID:クライアントシークレットのBase64エンコード値}の生成方法2) ローカルPC上でコマンドプロンプトを開き、下記コマンドを実行しクライアントID:クライアント・シークレットのBase64でのエンコードを行います。certutil -encode {上記にて作成したテキストファイル名} {Base64エンコード後のファイル名}3) Base64エンコードしたファイルを開き値を取得します。途中に改行がある場合には改行を削除します。1) テキストエディタにて、上記1にて控えた機密アプリケーションの「クライアントID」と「クライアント・シークレット」をコロンで繋いだ形式で保存します。※最後に改行をしないようにします。
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-urlencodedAuthorization: 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.