OAuth 2.0権限付与の使用
Oracle Integrationの「Oracle Utilitiesアダプタ」でOAuth 2.0権限付与タイプを使用するには、次の前提条件を実行する必要があります。
ノート:
OAuth 2.0権限を実行する前に、次の制限を理解してください。- 外部クライアント・アプリケーションで、システムが作成したOracle Identity Cloud Serviceアプリケーションを使用してOracle Integrationエンドポイントに対する認証を行わないでください。
- クライアント・アプリケーションのスコープは、そのサービス・インスタンスにデプロイされたすべての統合にアクセスすることです。 統合のサブセットへのアクセスを制限するためのサポートはありません。
- OAuthを使用してOracle Integrationフローをトリガーするには、「Oracle Utilitiesアダプタ」トリガー接続でもOAuthクライアント資格証明セキュリティ・ポリシーを使用する必要があります。
- OUAFアプリケーションでは、JWTクライアント・アサーション・セキュリティ・ポリシーを使用するOAuthクライアント資格証明、またはメッセージ・センダーが統合をトリガーするJWTユーザー・アサーション・セキュリティ・ポリシーを使用するOAuthはサポートされていません。 ただし、メッセージ・センダーは基本認証およびOAuthクライアント資格証明セキュリティ・ポリシーを使用して、統合のトリガー終了時にJWTベースの接続を開始できます。
すべての権限付与の前提条件
使用する権限タイプごとに次のタスクを実行します。
- Oracle Identity Cloud Service URLを取得します。
- Oracle UtilitiesアプリケーションのURLに移動します。 次のようなURLにリダイレクトされます:
https://idcs-c2881.identity.myhost.example.com/ui/v1/signin /signinを/adminconsoleに置き換えて、Oracle Identity Cloud Serviceにアクセスします。たとえば:https://idcs-c2881.identity.myhost.example.com/ui/v1/adminconsoleOracle Identity Cloud Serviceコンソールに再度サインインするように求められます。
- アイデンティティ・ドメイン管理者資格証明を使用してOracle Identity Cloud Serviceコンソールにログインします。
- Oracle UtilitiesアプリケーションのURLに移動します。 次のようなURLにリダイレクトされます:
- Oracle Identity Cloud ServiceのOracle Utilitiesアプリケーションを確認します。
Oracle Utilitiesアプリケーション・インスタンスがプロビジョニングされると、そのアプリケーション・インスタンスに対してOracle Identity Cloud Serviceアプリケーションが作成されます。 アプリケーション名は、次のように構成されます:
product-domaintenantsuffixsequential_numberたとえば:CCS-PRODC12345CMETERDATA0CCS-PRODC12345FIELDSERVICE1- 新しいOAuthクライアント・アプリケーションの作成をリクエストするには、クラウド操作サービス・リクエストを作成し、次の情報を指定します:
- OAuthクライアント・アプリケーションが必要な環境 (たとえば、PROD、TEST01、DEV)。
- クライアント名サフィクス: 統合の機能目的を示す可能性がある個別の名前を使用してください。
- 統合ポイントのわかりやすい説明を指定します。
- クライアント・タイプ(信頼または機密)およびクライアント証明書: 統合要件が信頼できるクライアントを要求する場合があり、外部アプリケーションが独自の証明書を提供する場合もあります。 それ以外の場合、Oracle Identity Cloud Serviceは内部ネイティブ証明書を使用して信頼できるクライアントを作成します。
- 目的の統合のためのOAuthフロー: クライアント資格証明は現在サポートされています。
- スコープ: REST APIまたはSOAP API、あるいはREST APIとSOAP APIの両方へのアクセス権を持つOAuthクライアント・アプリケーションを定義できます。
Oracle Utilitiesクラウド操作チームは、サービス・リクエストで指定された入力を使用してOAuthクライアントを作成します。- Oracle Identity Cloud Serviceにログインしてアプリケーションを取得します。
- Oracle Cloud Servicesに移動し、前述の名前を持つアプリケーションを検索してアプリケーションにアクセスします。
- 新しいOAuthクライアント・アプリケーションの作成をリクエストするには、クラウド操作サービス・リクエストを作成し、次の情報を指定します:
リソース所有者のパスワード資格証明の前提条件
次のタスクを実行します。
- Oracle Integrationアプリケーションおよびユーザー・ロールを検証します:
- 「構成」、Oracle Identity Cloud Serviceアプリケーションの「クライアント構成」の順に移動します。
- 「許可された許可タイプ」の「リソース所有者」および「リフレッシュ・トークン」が有効になっていることを確認します。
- 「構成」、Oracle Identity Cloud Serviceアプリケーションの「リソース」の順に移動します。
- 「リフレッシュ・トークンを許可するかどうか」オプションが有効になっていることを確認します。

REST APIまたはSOAP API、あるいはREST APIとSOAP APIの両方にアクセスできるスコープが提供されます。

- 適切なユーザーを様々なOracle Applicationロールに追加します。 標準/本番構成の場合は、ServiceUserロールを使用します。 (「Oracle Integration 3のプロビジョニングおよび管理」の「Oracle Integration Serviceロール」を参照してください。)
- ユーザーを割り当てるには、アプリケーションの「アプリケーション・ロール」セクションに移動し、AppWebServicesにユーザーを割り当てます。

- クライアント・アプリケーションを構成します:
- Oracle Identity Cloud Serviceコンソールで、「アプリケーション」セクションに移動し、OAuthユーティリティ接続を使用してOracle Utilitiesアプリケーションを起動できる新しいアプリケーションを作成します。 このアプリケーションを機密アプリケーションとして追加します。
- 「追加」をクリックします。
- 「機密アプリケーション」を選択します。
- 「詳細」ページに入力し、「クライアント」ページに移動します。
- 「クライアント」ページで、「このアプリケーションをクライアントとして構成」を選択し、次を追加します。
- 「リソース所有者」および「リフレッシュ・トークン」 for 「許可された許可タイプ」を選択します。
- 「承認済リソース」セクションで「特定」を選択します。
- 「リソース」セクションの下の「スコープの追加」をクリックします。

- Oracle Utilitiesアプリケーションを検索します。

- REST (/rest/*)またはSOAP(/soap/*) API、あるいはREST APIとSOAP APIの両方(/*)へのアクセスを含むスコープを追加し、>をクリックします。

- 変更を保存します。
- 変更を加えずに残りのウィザード・ページをクリックして、アプリケーションを保存します。
- 使用するアプリケーションをアクティブ化します。
- クライアント・アプリケーションを検証します:
- アクセス・クライアントをフェッチするには、ペイロードでユーザー名とパスワードを使用してOracle Identity Cloud Serviceにリクエストします。
ノート:
レスポンスの一部としてリクエスト・リフレッシュ・トークンをフェッチするには、スコープにoffline_accessを追加します。##Syntax curl -i -H 'Authorization: Basic <base64Encoded_clientid:secret>' -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<IDCS-Service-Instance>.identity.oraclecloud.com/oauth2/v1/token -d 'grant_type=password&username=<user-name>&password=<password>&scope=<App_Scope>%20offline_access' ###where #### <base64-clientid-secret> - Base 64 encode clientId:ClientSecret #### <username> - user for token needs to be issued (must be in serviceuser role). #### <password> - password for above user #### <app_scope> - Scope added while creating application in client configuration section ##Example curl -i -H 'Authorization: Basic OGQyM...ZDA0Mjcz' -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<idcs_host>/oauth2/v1/token -d 'grant_type=password&username=sampleUser&password=SamplePassword&scope=https://<Resource_APP_Audience>/rest/*%20offline_access' - レスポンスから
access_tokenおよびrefresh_tokenを取得します。{ "access_token": "eyJ4NXQjG...dfsdfsFgets2ed", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "AQAgY2MzNjVlOTVhOTRh...vM5S0MkrFSpzc=" } - 認可ヘッダーで
access_tokenを使用して、Oracle Utilitiesアプリケーション・エンドポイントを起動します。curl --location --request GET 'https://<Utilities_Application_API_ENDPOINT>' \ --header 'Authorization: Bearer eyJ4NXQjG...dfsdfsFgets2ed' - アクセス・トークンを更新するには、リフレッシュ・トークンを使用してOracle Identity Cloud Serviceにリクエストします。
- レスポンスから
access_tokenおよびrefresh_tokenを取得して、さらに使用します。curl -i -H 'Authorization: Basic <base64-clientid-secret>' -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<IDCS-Service-Instance>.identity.oraclecloud.com/oauth2/v1/token -d 'grant_type=refresh_token&refresh_token=<refresh_token>' ##Example curl -i -H 'Authorization: Basic OGQyM...ZDA0Mjcz' -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<IDCS-Service-Instance>.identity.oraclecloud.com/oauth2/v1/token -d 'grant_type=refresh_token&refresh_token=AQAgY2MzNjVlOTVhOTRh...vM5S0MkrFSpzc='
- アクセス・クライアントをフェッチするには、ペイロードでユーザー名とパスワードを使用してOracle Identity Cloud Serviceにリクエストします。
OAuthクライアント資格証明の前提条件
「Oracle Utilitiesアダプタ」を使用した統合におけるOAuthクライアント資格証明インバウンド・リクエストおよびアウトバウンド・リクエストのOracle Identity Cloud Service (IDCS)構成要件を次に説明します。
- Oracle Integrationへのインバウンド:
OAuthクライアント資格証明をOracle Integrationへのインバウンド方向で有効にするIDCS構成については、「Oracle Integration 3でのRESTアダプタの使用」の「クライアント資格証明の前提条件」を参照してください。
- Oracle IntegrationからOracle Utilitiesアプリケーションへのアウトバウンド:
次のタスクを実行します。
- Oracle Utilitiesアプリケーションおよびユーザー・ロールを検証します:
- 「構成」、Oracle Identity Cloud Serviceアプリケーションの「クライアント構成」の順に移動します。
- 「許可された許可タイプ」の「クライアント資格証明」が有効になっていることを確認します。
- 「構成」、Oracle Identity Cloud Serviceアプリケーションの「リソース」の順に移動します。 REST APIまたはSOAP API、あるいはREST APIとSOAP APIの両方にアクセスできるスコープが提供されます。

- 適切なユーザーを様々なOracle Utilitiesアプリケーション・ロールに追加します。 標準/本番構成の場合は、ServiceUserロールを使用します。 (「Oracle Integration 3のプロビジョニングおよび管理」の「Oracle Integration Serviceロール」を参照してください。)
- ユーザーを割り当てるには、AppWebServicesの下のアプリケーションの「アプリケーション・ロール」セクションに移動します。

- クライアント・アプリケーションを構成します:
- Oracle Identity Cloud Serviceコンソールで、「アプリケーション」セクションに移動し、OAuthユーティリティ接続を使用してOracle UtilitiesアプリケーションAPIを起動できる新しいアプリケーションを作成します。 アプリケーションは機密アプリケーションとして追加されます。
- 「詳細」セクションに入力し、「クライアント」セクションに移動します。
- 「クライアント」ページで、「このアプリケーションをクライアントとして構成」を選択し、次のように入力します:
- 「許可された許可タイプ」リストから「クライアント資格証明」を選択します。
- 「トークン発行ポリシー」セクションの「承認済リソース」領域で「特定」を選択します。
- 「リソース」セクションの下の「スコープの追加」をクリックします。
- Oracle Utilitiesアプリケーションを検索します。

- REST APIまたはSOAP API、あるいはREST APIとSOAP APIの両方へのアクセスを含むスコープを追加し、>をクリックします。

- 変更を保存します。
- 変更を加えずに残りのウィザード・ページをクリックして、アプリケーションを保存します。
- 使用するアプリケーションをアクティブ化します。
次のステップは、適切なOracle Utilities Cloud Service (Oracle Utilities Meter Solution Cloud Serviceなど)にアプリケーション・ユーザーを作成することです。 適切なOracle Utilities Cloud Serviceアプリケーションにアクセスし、ユーザー・ポータルにナビゲートします。- 前に作成したOAuthクライアントに対応する新しいユーザーを作成します:
Add Userを検索します。- ユーザーのログインIDとしてOAuthクライアントIDを入力します。
- USER、LAST NAME、FIRST NAMEなど、必須フィールドに任意の値を指定します。
- USER ENBLEを「有効化」として選択します。
- 適切な機能(たとえば、将来の有効期限を提供するALL_SERVICESユーザー・グループ)へのアクセス権を統合に提供する「ユーザー・グループ」を割り当てます。
- 「作業予定ロール」 (たとえば、F1_DFLTシステムのデフォルト・ロール)および適切な「アクセス・セキュリティ」 (たとえば、「システム・デフォルト」)を有効期限付きで、作成したユーザーに割り当てます。
- ユーザーを保存します。
これで、OAuthクライアント資格証明を使用する準備ができました。
- クライアント・アプリケーションを検証します。
- ペイロード内のクライアントのクライアントIDおよびクライアント・シークレットを使用してOracle Identity Cloud Serviceにリクエストを行うアクセス・クライアントをフェッチします。
##Syntax curl -i -H 'Authorization: Basic <base64Encoded_clientid:secret>' -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<IDCS-Service-Instance>.identity.oraclecloud.com/oauth2/v1/token -d 'grant_type=client_credentials&scope=<App_Scope>' ###where #### <base64-clientid-secret> - Base 64 encode clientId:ClientSecret #### <app_scope> - Scope added while creating application in client configuration section ##Example curl -i -H 'Authorization: Basic OGQyM...ZDA0Mjcz' -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<idcs_host>/oauth2/v1/token -d 'grant_type=client_credentials&scope=https://<Resource_APP_Audience>/rest/*' - レスポンスから
access_tokenを取得します。{ "access_token": "eyJ4NXQjG...dfsdfsFgets2ed", "token_type": "Bearer", "expires_in": 3600 } - 認可ヘッダーで
access_tokenを使用して、Oracle UtilitiesアプリケーションAPIを起動します。curl --location --request GET 'https://<Utilities_Application_API_ENDPOINT>' \ --header 'Authorization: Bearer eyJ4NXQjG...dfsdfsFgets2ed' - アクセス・トークンが期限切れになったときに更新するには、Oracle Identity Cloud Serviceに対して同じリクエストを行います。
- ペイロード内のクライアントのクライアントIDおよびクライアント・シークレットを使用してOracle Identity Cloud Serviceにリクエストを行うアクセス・クライアントをフェッチします。
- Oracle Utilitiesアプリケーションおよびユーザー・ロールを検証します:
JWTアサーションの前提条件
- Oracle Integrationへのインバウンド
Oracle Integrationへのインバウンド方向でJWTユーザー/クライアント・アサーションを有効にするIDCS構成については、「Oracle Integration 3でのRESTアダプタの使用」の「JWTユーザー・アサーションの前提条件」を参照してください。
- Oracle IntegrationからOracle Utilitiesアプリケーションへのアウトバウンド
- キーの生成
- クライアント・アプリケーションの構成
- 証明書を信頼できるパートナとして追加
- JWTユーザー・アサーションの生成
- JWTクライアント・アサーションの生成
- クライアント・アプリケーションの検証
- キーの生成
JWTユーザー・アサーションのクライアント・アプリケーションを構成するときに、インポートするキーを最初に生成する必要があります。
- 自己署名キー・ペアを生成します。
keytool -genkey -keyalg RSA -alias <your_alias> -keystore <keystore_file> -storepass <password> -validity 365 -keysize 2048 ##example keytool -genkey -keyalg RSA -alias assert -keystore sampleKeystore.jks -storepass samplePasswd -validity 365 -keysize 2048 - JWTアサーションに署名するための公開キーをエクスポートします。
keytool -exportcert -alias <your_alias> -file <filename> -keystore <keystore_file> -storepass <password> ##example keytool -exportcert -alias assert -file assert.cer -keystore sampleKeystore.jks -storepass samplePasswd ## This should show a success message e.g. Certificate stored in file <assert.cer> - キーストアをP12形式に変換します。
keytool -importkeystore -srckeystore <filename> -srcstorepass <password> -srckeypass <password> -srcalias <your_alias> -destalias <your_alias> -destkeystore <destFileName> -deststoretype PKCS12 -deststorepass <password> -destkeypass <password> ##example keytool -importkeystore -srckeystore sampleKeystore.jks -srcstorepass samplePasswd -srckeypass samplePasswd -srcalias assert -destalias assert -destkeystore assert.p12 -deststoretype PKCS12 -deststorepass samplePasswd -destkeypass samplePasswd ## This should show a success message e.g. Importing keystore sampleKeystore.jks to assert.p12... - P12キーストアから秘密キーをエクスポートします。
openssl pkcs12 -in <destFileName> -nodes -nocerts -out <pem_file> ##example openssl pkcs12 -in assert.p12 -nodes -nocerts -out private_key.pem ## This should show a success message: MAC verified OK
- 自己署名キー・ペアを生成します。
- クライアント・アプリケーションの構成Oracle Cloud Infrastructureコンソールで、「統合アプリケーション」セクションに移動して、JWTユーティリティ接続でOracle UtilitiesアプリケーションAPIを起動できる新しいアプリケーションを作成します。
- 「Add application」をクリックします。
- 「機密アプリケーション」を選択し、「ワークフローの起動」をクリックします。
- 「アプリケーションの詳細」セクションに名前を入力します。 このページの残りのフィールドはオプションであり、無視してかまいません。
- 「次へ」をクリックします。
- 「クライアント構成」セクションで、「このアプリケーションをクライアントとして今すぐ構成」を選択し、次のように入力します:
- JWTアサーションの場合、「許可された付与タイプ」セクションで「JWTアサーション」および「トークンのリフレッシュ」を選択します。
- 「リダイレクトURL」、「ログアウト後リダイレクトURL」および「ログアウトURL」フィールドは空白のままにします。
- 「クライアント・タイプ」セクションで、「信頼」を選択します。
- 「キーの生成」セクションで作成した公開証明書をアップロードします。
- 別名を指定します。 アサーションの作成時に使用されるため、この別名を覚えておいてください。 このアクションは、証明書を信頼できるパートナとして追加します。
- 複数のフィールドをバイパスし、「トークン発行ポリシー」セクションまで下にスクロールします。
- 「認可されたリソース」セクションで「特定」を選択します。
- 「リソースの追加」チェック・ボックスをクリックします。
- 「スコープの追加」をクリックします。
- 検索機能を使用して、Oracle Utilitiesアプリケーションを検索します。

- REST APIまたはSOAP API、あるいはREST APIとSOAP APIの両方へのアクセスを含むスコープを追加します。 スコープが「リソース」セクションに表示されます。
- 変更を加えずに残りのウィザード・ページをクリックして、アプリケーションを保存します。
- 使用するアプリケーションをアクティブ化します。
- 「一般情報」セクションで、クライアントIDおよびクライアント・シークレットの値を書き留めます。 これらの値は、アイデンティティ・ドメインと通信しているサード・パーティ・アプリケーションに必要です。
- 信頼できるパートナとしての証明書の追加署名証明書をクライアント・アプリケーションにインポートするだけでなく、証明書を信頼できるパートナ証明書として含める必要もあります。
- ナビゲーション・ペインで、「設定」をクリックします。

- 「信頼できるパートナ証明書」をクリックします。
- 「証明書のインポート」をクリックして、「キーの生成」セクションに作成された公開証明書をアップロードします。
- ナビゲーション・ペインで、「設定」をクリックします。
- JWTユーザー・アサーションの生成
生成された秘密キーと単純なJavaコードを使用してJWTユーザー・アサーションを生成します。
ノート:
https://github.com/jwtk/jjwtライブラリを使用して、ユーザー・アサーションを生成できます。 https://jwt.io/には、複数のテクノロジ用に多数のライブラリがリストされています。Sample: header: { "alg": "RS256", "typ": "JWT", "kid": "assert" } payload: { "sub": "utilitiesApplicationUser", "jti": "8c7df446-bfae-40be-be09-0ab55c655436", "iat": 1589889699, "exp": 1589909699, "iss": "d702f5b31ee645ecbc49d05983aaee54", "aud": "https://identity.oraclecloud.com/" }説明:subでは、ユーザー・アサーションが生成されるユーザー名を指定します。jtiは一意の識別子です。iatが発行されます(エポック秒)。expはトークンの有効期限(エポック秒)です。issは、クライアントID監査にアイデンティティ・ドメイン・オーディエンスhttps://identity.oracle.com/が含まれている必要があります。 署名アルゴリズムはRS256である必要があります。kidは、シグネチャの検証に使用するキーを指定します。 したがって、アップロードした証明書の別名と一致する必要があります。
- JWTクライアント・アサーションの生成
JWTユーザー・アサーションと同様に、生成された秘密キーと単純なJavaコードを使用してクライアント・アサーションを生成できます。
ノート:
https://github.com/jwtk/jjwtライブラリを使用して、ユーザー・アサーションを生成できます。 https://jwt.io/には、複数のテクノロジ用に多数のライブラリがリストされています。Sample: header: { "alg": "RS256", "typ": "JWT", "kid": "assert" } payload: { "sub": "d702f5b31ee645ecbc49d05983aaee54", "jti": "8c7df446-bfae-40be-be09-0ab55c655436", "iat": 1589889699, "exp": 1589909699, "iss": "d702f5b31ee645ecbc49d05983aaee54", "aud": "https://identity.oraclecloud.com/" }説明:subは、クライアント・アプリケーションのクライアントIDを指定します。jtiは一意の識別子です。iatが発行されます(エポック秒)。expはトークンの有効期限(エポック秒)です。issは、クライアントID監査にアイデンティティ・ドメイン・オーディエンスhttps://identity.oracle.com/が含まれている必要があります。 署名アルゴリズムはRS256である必要があります。kidは、シグネチャの検証に使用するキーを指定します。 したがって、アップロードした証明書の別名と一致する必要があります。
ノート:
ユーザー・アサーションでは、ユーザー名としてsubを追加します。 クライアント・アサーションでは、クライアントIDをsubとして追加します。 - クライアント・アプリケーションの検証
- JWTユーザー・アサーションを生成したら、次のようにアクセス・トークンを生成します。
##Syntax curl -i -H 'Authorization: Basic <base64Encoded clientid:secret>' -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<Identity_Domain_Service_Instance>.identity.oraclecloud.com/oauth2/v1/token -d 'grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=<user assertion>&scope=<app_scope>' ###where #### grant type - urn:ietf:params:oauth:grant-type:jwt-bearer #### <base64-clientid-secret> - Base 64 encode clientId:ClientSecret #### <user assertion> - User assertion generated #### <app scope> - Scope added while creating application in client configuration section - レスポンスから
access_tokenを取得します。{ "access_token": "eyJ4NXQjG...dfsdfsFgets2ed", "token_type": "Bearer", "expires_in": 3600 } - 認可ヘッダーで
access_tokenを使用して、Oracle UtilitiesアプリケーションAPIを起動します。curl --location --request GET 'https://<Utilities_Application_API_ENDPOINT>' \ --header 'Authorization: Bearer eyJ4NXQjG...dfsdfsFgets2ed' - アクセス・トークンが期限切れになったときに更新するには、Oracle Identity Cloud Serviceに対して同じリクエストを行います。
- JWTユーザー・アサーションを生成したら、次のようにアクセス・トークンを生成します。
- 新規セキュリティ・ポリシーの追加
- OAuth JWTクライアント・アサーションを使用したクライアント資格証明
- JWTユーザー・アサーションを使用したOAuth


