3 OWSM OAuth 2.0とIDCS OAuth 2.0を使用したRESTful Webサービスの保護
ユース・ケースの説明、ソリューションのサマリー、関連するコンポーネントおよびリンクされたドキュメント・リソースを参照して、OWSM OAuth 2.0とIDCS OAuth 2.0サーバーを使用してRESTful Webサービスを保護できます。
この章の構成は、次のとおりです。
3.1 ユース・ケース: OWSM OAuth 2.0とIDCS OAuth2サーバーを使用したRESTful Webサービスの保護
RESTful Webサービスを開発し、OWSMポリシーを使用して、IDCSのリソースおよびクライアント・アプリケーションに対して、それらのRESTful Webサービスを保護できます。
- ユース・ケース
-
OWSM OAuth 2.0とIDCS OAuth2サーバーを使用してRESTful Webサービスを保護します。
- 実装サマリー
-
RESTful Webサービスを開発し、OWSMポリシーを使用して、IDCSのリソースおよびクライアント・アプリケーションに対して、それらのRESTful Webサービスを保護します
- コンポーネント
-
-
Oracle WebLogic Server
-
Oracle Fusion Middleware
-
Oracle Web Services Manager(OWSM)
- IDCS
-
- 必須ドキュメント
-
このユース・ケースを完了するには、次のドキュメント・リソースを参照してください。
このユース・ケースには、次のステップが含まれています。
-
WLSを使用したIDCSセキュリティ・プロバイダの構成
-
IDCS OAuth2の構成
-
OWSM OAuth2セキュリティ・ポリシーを使用したJAX-RS RESTサービスの保護
-
OWSM OAuth2セキュリティ・ポリシーを使用したJAX-RS RESTクライアントの保護
3.2 IDCS向けWebサービスの実装 - 前提条件
IDCS向けのWebサービスを実装する前に、IDCSのダウンロードとインストールを行い、WebLogicドメインを構成して、管理サーバーを起動し、Oracle Enterprise Manager Fusion Middleware ControlおよびOracle WebLogic Serverリモート・コンソールへのアクセス権を取得します。
始める前に、次のことを確認してください。
-
WebLogic Serverをダウンロードしてインストールし、ドメインを作成します。
-
Oracle Fusion Middleware (OWSMを含む)をダウンロードしてインストールします。
詳細は、Oracle Fusion MiddlewareのインストールのプランニングのOracle Fusion Middlewareインストールの準備に関する項を参照してください。
Oracle Fusion Middleware製品の検索やダウンロードの詳細は、OTNでOracle Fusion Middlewareダウンロード、インストール、構成のREADMEファイルを参照してください。
-
IDCSを構成します。
詳細は、『Oracle Identity Cloud Serviceの管理』の「Oracle Identity Cloud Serviceスタート・ガイド」を参照してください。
-
OPSS SCIMベースのアイデンティティ・ストア・サービスを構成します。
詳細は、『Fusion Middleware Oracle Platform Security Servicesによるアプリケーションの保護』の「アイデンティティ・ストアの構成」を参照してください。
3.3 WLSを使用したIDCSセキュリティ・プロバイダの構成
OracleIdentityCloudIntegratorという単一のセキュリティ・プロバイダによって、アイデンティティ・アサーションと認証が結合されます。このセキュリティ・プロバイダは、WLSがIDCSでユーザーを認証できるように、OAuthクライアントに関連付けられます。
IDCSセキュリティ・プロバイダのインストール
ノート:
デフォルトではIDCSにWebLogicブート・ユーザーは存在しないため、ブート・ユーザーを含む認証プロバイダが必要です。ブート・ユーザーが埋込みLDAPに格納される場合、ブート用にDefaultAuthenticatorが必要です。次のステップに従って、WLSでOracleIdentityCloudIntegratorをインストールおよび構成します。
OracleIdentityCloudIntegratorセキュリティ・プロバイダはWLSに含まれます。
IDCSからのOAuthクライアントの取得
プロパティ名 |
型 |
コメント |
ClientTenant |
文字列 |
OAuthクライアントがプロビジョニングされたテナント名 |
ClientId |
文字列 |
IDCSユーザー・ストアへのアクセスに使用されるOAuthクライアントID |
ClientSecret |
文字列 |
アクセス・トークンを生成するためのOAuthクライアント・シークレット(パスワード) |
ノート:
OAuthクライアントは、それがプロビジョニングされた特定のIDCSテナント内で使用されます。このクライアントを使用して他のIDCSテナントにアクセスする要件が生じた場合は、クロス・テナントIDCS AppRoleがクライアントに付与されます。-
アイデンティティ・ドメイン管理者IDCS AppRoleを使用したOAuthクライアントの設定
-
テナント管理者としてIDCS管理コンソールにログインします
-
「アプリケーション」タブにアクセスして、「追加」を選択します
-
「信頼できるアプリケーション」オプションを選択して、設定ウィザードで次に示すステップに従います。
-
クライアントの名前と説明を入力して、「次」を選択します
-
「このアプリケーションをクライアントとして今すぐ構成します」を選択します
-
「許可される権限付与タイプ」のみに「クライアント資格証明」オプションを選択します
-
「Identity Cloud Service管理APIへのクライアント・アクセス権を付与します」のボックスを選択します
-
白いドロップダウン・ボックスをクリックして、「アイデンティティ・ドメイン管理者」を選択します
-
その他のオプションを空白のままにして、「次」を選択します
-
「終了」を選択します。
-
-
ログイン用のクライアントID、クライアント・シークレットおよびテナント名の記録
-
次のステップに従って、新しいアプリケーションをアクティブ化し、OAuthクライアントがアクティブ化されたことを確認します。
-
「アプリケーション」タブにアクセスします
-
新たに作成されたアプリケーションを選択します
-
メニュー・バーの「アクティブ化」をクリックします。
-
-
-
必要に応じて、追加のIDCSテナントにアクセスするためのOAuthクライアントを設定します。次のいずれかのオプションを使用して、追加のIDCSテナントへのアクセス権を付与できます。
オプション1: CTAppRoleGranter JSONを使用した付与CTAppRoleGranter.json { "schemas": [ "urn:ietf:params:scim:schemas:oracle:idcs:CrossTenantAppRoleGranter" ] }
-
オプション2: PUT操作を使用したクロス・テナントIDCS AppRoleの付与
% curl -X PUT -H "Content-type: application/json" -H "Authorization: Bearer <access-token>" --data @CTAppRoleGranter.json http://tenant1.identity.c9dev0.oc9qadev.com/admin/v1/CrossTenantAppRoleGranter/a28132cdfdf5367a9f7810a3f47bbdf6
IDCSセキュリティ・プロバイダの構成
WLSTオンライン、WLSTオフラインまたはWLS管理コンソールを使用して、インストール済のIDCSセキュリティ・プロバイダを構成できます。
WLSTオンラインおよびWLSTオフラインを使用して構成するには、Oracle Identity Cloud Integratorプロバイダの構成: 主なステップと例に関する項を参照してください。
管理コンソールを使用して構成するには、セキュリティ・プロバイダの管理に関する項を参照してください。
IDCSセキュリティ・プロバイダ用のSSLの構成
IDCSセキュリティ・プロバイダでSSLを構成して、SSL経由のIDCSインスタンスへのアウトバウンドhttp接続が適切に機能するようにする必要があります。
「Oracle Identity Cloud IntegratorプロバイダのためのTLS/SSLの構成」を参照してください。
3.4 IDCS OAuth2の構成
3.4.1 IDCSでのOAuth2サービスの登録
IDCSで新しいリソース・アプリケーションが構成されて、そのリソース・アプリケーションにリソースのURLが追加されます。
IDCSでの新しいリソース・アプリケーションの構成
次のステップに従って、IDCSで新しいリソース・アプリケーションを構成します。
-
IDCS管理コンソールにログインします
-
「アプリケーション」タブを選択します
-
新規アプリケーションを追加します
-
アプリケーション・ウィザードで、「Webアプリケーション」を選択し、詳細を指定します
-
ウィザードで、クライアント構成のスキップを選択して次のページに移動します
-
リソース・ページで、スコープ、プライマリ・オーディエンスおよびセカンダリ・オーディエンスを指定します
-
ウィザードを終了します
-
アプリケーションを保存します
-
「アクティブ化」をクリックして、アプリケーションをアクティブ化します。
ノート:
"RSApp"アプリケーションがテスト用に作成されます。セカンダリ・オーディエンスとしてリソースURLをさらに追加し、テスト・リソースと統合できます。
IDCSのリソース・アプリケーションにリソースのURLを追加
次のステップに従って、リソースのURLをIDCSのリソース・アプリケーションに追加します。
-
IDCS管理コンソールにログインします
-
「アプリケーション」タブに移動します
-
"RSApp"アプリケーションを選択します
-
「構成」タブに移動します
-
「リソース」セクションを展開します
-
セカンダリ・オーディエンスに対するURLを入力します
-
「追加」(セカンダリ・オーディエンスに対するもの)をクリックして、セカンダリ・オーディエンスを追加します
-
「保存」をクリックして、アプリケーションへの変更を保存します。
3.4.2 IDCSでのOAuth2クライアントの構成
IDCSにOAuth2クライアントが構成されます。
次のステップに従って、IDCSにOAuth2クライアントを構成できます。
-
IDCS管理コンソールにログインします
-
「アプリケーション」タブに移動します
-
新規アプリケーションを追加します
ノート:
クライアント・アプリケーションは、リソース・アプリケーションとは異なります。 -
アプリケーション・ウィザードで、「Webアプリケーション」を選択し、詳細を指定します
-
「クライアント構成」で、クライアントを登録して、次の情報を指定します。
-
権限付与タイプ
-
クライアント・タイプ
-
クライアント証明書のインポート
-
許可されているスコープの追加
ノート:
スコープは、すでに追加されているリソース・アプリケーションから選択されます。 -
Identity Cloud Service管理APIへのクライアント・アクセス権を付与します。 - 「アイデンティティ・ドメイン管理者」を選択します。
-
-
ウィザードを終了します
-
アプリケーションを保存します
-
「アクティブ化」をクリックして、アプリケーションをアクティブ化します。
ノート:
"ClientApp"アプリケーションがテスト用に作成されます。クライアントIDとクライアント・シークレットをノートにとります。
3.5 OWSM OAuth2セキュリティ・ポリシーを使用したJAX-RS RESTサービスの保護
次のサービス側のOWSM WSポリシーを使用してRESTサービスを保護します。
ポリシー |
説明 |
|
クライアントが送信するトークンに基づいて、saml、http、spnego、jwtなどの認証ポリシーのいずれかを実行します。 |
OWSMポリシーのグローバルな割当て
wls:/service_domain/serverConfig> beginWSMSession() Location changed to domainRuntime tree. This is a read-only tree with DomainMBean as the root. For more help, use help('domainRuntime') Session started for modification. wls:/service_domain/serverConfig> createWSMPolicySet('oauth-ps', 'rest-resource', 'Domain("*")', 'Policy set for All Rest Resources', 'true') The policy set was created successfully in the session. true wls:/service_domain/serverConfig> attachWSMPolicy('oracle/multi_token_over_ssl_rest_service_policy') Policy reference "oracle/multi_token_over_ssl_rest_service_policy" added. wls:/service_domain/serverConfig> commitWSMSession()
IDCS署名証明書のインポート
-
次のクライアントIDとクライアント・シークレットおよびスコープurn:opc:idm:__myscopes__を使用して、
アクセス・トークンを取得します。取得したアクセス・トークンは、IDCS署名証明書の取得に使用されます。ノート:
https://www.base64encode.org/で(ClientID:ClientSecret)をbase64にエンコードしますアクセス・トークンを取得するためのCurl
$ curl -i -H 'Content-Type:application/x-www-form-urlencoded; charset=utf-8' -H 'Authorization:Basic MzhlZjQyZmRiOTJlNDY3YjkzNWIxMzhmNmIwMmQyMTE6MDQwN2ViYjMtZWM3NS00Y2FlLTkxMzItODI0M2FiM2Q4NTNj' --request POST 'https://owsm.identity.c9dev0.oc9qadev.com:443/oauth2/v1/token' -d 'grant_type=client_credentials& scope=urn:opc:idm:__myscopes__' #response HTTP/1.1 200 OK Server: Oracle-Traffic-Director/11.1.1.9 Date: Mon, 11 Jul 2016 11:50:27 GMT X-xss-protection: 1; mode=block X-content-type-options: nosniff Cache-control: no-store Pragma: no-cache Content-type: application/json;charset=UTF-8 Content-length: 1915 Via: 1.1 net-idcs-config Proxy-agent: Oracle-Traffic-Director/11.1.1.9 {"access_token":"eyJ4NXQjUzI1NiI6Ijg1a3E1MFVBVmNSRDJOUTR6WVZMVDZXbndUZmVidjBhNGV2YUJGMjFqbU0iLCJ4NXQiOiJNMm1hRm0zVllsTUJPbjNHZXRWV0dYa3JLcmsiLCJraWQiOiJTSUdOSU5HX0tFWSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiIzOGVmNDJmZGI5MmU0NjdiOTM1YjEzOGY2YjAyZDIxMSIsInVzZXIudGVuYW50Lm5hbWUiOiJvd3NtIiwic3ViX21hcHBpbmdhdHRyIjoidXNlck5hbWUiLCJpc3MiOiJodHRwczpcL1wvaWRlbnRpdHkub3JhY2xlY2xvdWQuY29tXC8iLCJ0b2tfdHlwZSI6IkFUIiwiY2xpZW50X2lkIjoiMzhlZjQyZmRiOTJlNDY3YjkzNWIxMzhmNmIwMmQyMTEiLCJ1c2VyX2lzQWRtaW4iOnRydWUsImF1ZCI6WyJodHRwczpcL1wvb3dzbS5pZGVudGl0eS5jOWRldjAub2M5cWFkZXYuY29tOjQ0MyIsInVybjpvcGM6bGJhYXM6bG9naWNhbGd1aWQ9b3dzbSJdLCJjbGllbnRBcHBSb2xlcyI6WyJBdXRoZW50aWNhdGVkIENsaWVudCJdLCJzY29wZSI6InVybjpvcGM6aWRtOnQuc2VjdXJpdHkuY2xpZW50IiwiY2xpZW50X3RlbmFudG5hbWUiOiJvd3NtIiwiZXhwIjoxNDg5MDc1NzAwLCJpYXQiOjE0ODkwNzIxMDAsImNsaWVudF9uYW1lIjoiMTJfMl8xXzIgaWRjcyB0ZXN0IG5vbi1zc2wgY2xpZW50IiwidGVuYW50Ijoib3dzbSIsImp0aSI6IjY3ZWEzZDk5LWNiNGEtNDlkYS1iNWE5LWYyZjM4OTA0ODQ2OCJ9.dzKdnUS5hPMduP3jJ-G-v56qmagLNMjKNPsilQuAbxf8uj2z2ZB5I-RjOocihhahbqlsBZUOOMuzhTZHzFy5AGBKv-mMeraFl87c3Xhjmw3r2phC9T-YfGgRUSEwxrRsKF0FkIi4TX9Kwi0hdrKiMCMFV1gav5v1dGmklwCfNjQ","token_type":"Bearer","expires_in":3600}
-
先ほど取得したアクセス・トークンを使用して、署名証明書を取得します。
署名証明書を取得するためのCurl$ curl -X GET -H 'Content-Type:application/scim+json' -H 'Authorization:Bearer eyJ4NXQjUzI1NiI6Ijg1a3E1MFVBVmNSRDJOUTR6WVZMVDZXbndUZmVidjBhNGV2YUJGMjFqbU0iLCJ4NXQiOiJNMm1hRm0zVllsTUJPbjNHZXRWV0dYa3JLcmsiLCJraWQiOiJTSUdOSU5HX0tFWSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiIzOGVmNDJmZGI5MmU0NjdiOTM1YjEzOGY2YjAyZDIxMSIsInVzZXIudGVuYW50Lm5hbWUiOiJvd3NtIiwic3ViX21hcHBpbmdhdHRyIjoidXNlck5hbWUiLCJpc3MiOiJodHRwczpcL1wvaWRlbnRpdHkub3JhY2xlY2xvdWQuY29tXC8iLCJ0b2tfdHlwZSI6IkFUIiwiY2xpZW50X2lkIjoiMzhlZjQyZmRiOTJlNDY3YjkzNWIxMzhmNmIwMmQyMTEiLCJ1c2VyX2lzQWRtaW4iOnRydWUsImF1ZCI6WyJodHRwczpcL1wvb3dzbS5pZGVudGl0eS5jOWRldjAub2M5cWFkZXYuY29tOjQ0MyIsInVybjpvcGM6bGJhYXM6bG9naWNhbGd1aWQ9b3dzbSJdLCJjbGllbnRBcHBSb2xlcyI6WyJBdXRoZW50aWNhdGVkIENsaWVudCJdLCJzY29wZSI6InVybjpvcGM6aWRtOnQuc2VjdXJpdHkuY2xpZW50IiwiY2xpZW50X3RlbmFudG5hbWUiOiJvd3NtIiwiZXhwIjoxNDg5MDc1NzAwLCJpYXQiOjE0ODkwNzIxMDAsImNsaWVudF9uYW1lIjoiMTJfMl8xXzIgaWRjcyB0ZXN0IG5vbi1zc2wgY2xpZW50IiwidGVuYW50Ijoib3dzbSIsImp0aSI6IjY3ZWEzZDk5LWNiNGEtNDlkYS1iNWE5LWYyZjM4OTA0ODQ2OCJ9.dzKdnUS5hPMduP3jJ-G-v56qmagLNMjKNPsilQuAbxf8uj2z2ZB5I-RjOocihhahbqlsBZUOOMuzhTZHzFy5AGBKv-mMeraFl87c3Xhjmw3r2phC9T-YfGgRUSEwxrRsKF0FkIi4TX9Kwi0hdrKiMCMFV1gav5v1dGmklwCfNjQ' https://owsm.identity.c9dev0.oc9qadev.com:443/admin/v1/SigningCert/jwk
#GET response {"keys":[{"kty":"RSA","e":"AQAB","x5t":"M2maFm3VYlMBOn3GetVWGXkrKrk","kid":"SIGNING_KEY","x5c":["MIICUDCCAbmgAwIBAgIELfGcXDANBgkqhkiG9w0BAQUFADBXMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGb3JhY2xlMRUwEwYKCZImiZPyLGQBGRYFY2xvdWQxETAPBgNVBAMTCENsb3VkOUNBMB4XDTE1MTEyMDA5MzI0OFoXDTI1MTExNzA5MzI0OFowXzETMBEGCgmSJomT8ixkARkWA2NvbTEWMBQGCgmSJomT8ixkARkWBm9yYWNsZTEVMBMGCgmSJomT8ixkARkWBWNsb3VkMRkwFwYDVQQDDBBvcmNsTVQxMjMyMzJfaWRtMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCLVvyue+qFraxwM5LxaNLt2QH3wHn/n0+yk2jmP7mpYkz1xrKuEk2e2SCggzK8MT9jJ5VUaNlF0MwhIZ8/naxA5LPCzGEVfZ/41GPtGNADFyspqGHkdsNv+M2eCBme7MDp9L3noBtt2peqGqxSu0DHyt1wgNr6p6EXqTT4AbLdyQIDAQABoyEwHzAdBgNVHQ4EFgQU2rtogHKC0/ws2dS3Zq7s9wwMofkwDQYJKoZIhvcNAQEFBQADgYEAK1jtcbRpYFAl2Bp9X02MaA/igq3WXykizH7uQvrWgNQluf7ADbxaB7J96jaIN2GLQFxl6cbPwOvBIu7xd9a26eK6F5gq4iJKm7GeOgV5PZ4r5umvSZgA0aLOAbhZ/gwy40RauF0X+4I7JqamnV0DizM2YEDsFWKfTSvCy90ZizM=","MIICXjCCAcegAwIBAgIEYHXCUDANBgkqhkiG9w0BAQUFADBXMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGb3JhY2xlMRUwEwYKCZImiZPyLGQBGRYFY2xvdWQxETAPBgNVBAMTCENsb3VkOUNBMCAXDTE1MTExOTEyMDA0MloYDzIxMTUxMDI2MTEwMDQyWjBXMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGb3JhY2xlMRUwEwYKCZImiZPyLGQBGRYFY2xvdWQxETAPBgNVBAMTCENsb3VkOUNBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCXl3J0Xln1SIanXnUCsvqovrTKdjbLYMR1orCejmX+zvigvVsz/l/lMIkEzFM6fgeFFlBG6RjVu3b+44sinbIGBq56cCDZejk+MK5Sg/K9vu8kCzQbLw0I1XlpoR06hX4Kk33f8ItzAtorX7fiONDuBp0i9/1Q3E0sSWTGooCoswIDAQABozUwMzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT8Km+50GihFXPqEmu6IbzsSBjH1zANBgkqhkiG9w0BAQUFAAOBgQA8nRvd8/whkVX1MlXw/1C0/3fkWH5t7K4hoDz2ZRDvonQoAOrRDHJyDhX95T+QhQHRauspJhRzDn9eQmL6pL+42VC4i98zIMuzoAeCNItFjFAAMm6nomZVPdMvOs3dsnwIEBDOJ3FAh4Pg8H9lxdKpmCtFyxewkm/4UhCSaeFtow=="],"alg":"RS256","n":"i1b8rnvqha2scDOS8WjS7dkB98B5_59PspNo5j-5qWJM9cayrhJNntkgoIMyvDE_YyeVVGjZRdDMISGfP52sQOSzwsxhFX2f-NRj7RjQAxcrKahh5HbDb_jNnggZnuzA6fS956AbbdqXqhqsUrtAx8rdcIDa-qehF6k0-AGy3ck"}]}
-
"-----BEGIN CERTIFICATE-----"と"-----END CERTIFICATE-----"の間に同じものを入れ、前述のレスポンスの証明書部分ごとに証明書ファイルを作成します
-
1つ目の証明書をidcs.cert、2つ目の証明書をidcs-ca.certとして保存します
-
OWSMのKSSキーストアに証明書をインポートします。
KSSへの証明書のインポートwls:/jrfServer_domain/serverConfig/> svc = getOpssService(name='KeyStoreService') wls:/jrfServer_domain/serverConfig/> svc.importKeyStoreCertificate(appStripe='owsm', name='keystore', password='', alias='idcs', keypassword='', type='TrustedCertificate', filepath='/scratch/ankianja/idcs.cert') Already in Domain Runtime Tree Certificate imported. wls:/jrfServer_domain/serverConfig/> svc.importKeyStoreCertificate(appStripe='owsm', name='keystore', password='', alias='idcs-ca.cert', keypassword='', type='TrustedCertificate', filepath='/scratch/ankianja/idcs-ca.cert') Already in Domain Runtime Tree Certificate imported.
サービス・ドメインの信頼への信頼できる発行者の構成
次のステップに従うと、信頼できる発行者がサービス・ドメインに構成され、信頼できる発行者のエージェント信頼ドキュメントに信頼エントリが追加されます。
-
証明書の出力
keytool -printcert -file idcs.crt Entry type: trustedCertEntry Owner: CN=orclMT123232_idm, DC=cloud, DC=oracle, DC=com Issuer: CN=Cloud9CA, DC=cloud, DC=oracle, DC=com Serial number: 2df19c5c Valid from: Fri Nov 2001:32:48PST 2015until: Mon Nov 1701:32:48PST 2025 Certificate fingerprints: MD5: 08:82:9E:3B:E1:2B:D3:0B:A1:9A:EC:32:1A:03:EC:05 SHA1: 33:69:9A:16:6D:D5:62:53:01:3A:7D:C6:7A:D5:56:19:79:2B:2A:B9 Signature algorithm name: SHA1withRSA Version: 3 Extensions: #1: ObjectId: 2.5.29.14Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: DA BB 68807282D3 FC 2C D9 D4 B7 66AE EC F7 ..h.r...,...f... 0010: 0C 0C A1 F9 .... ] ]
ノート:
-
先ほど取得した証明書の所有者を使用して、OWSMで信頼できる発行者を構成します。たとえば、ここでの所有者は'CN=orclMT123232_idm, DC=cloud, DC=oracle, DC=com'です
-
IDCSの場合、信頼できる発行者は"https://identity.oraclecloud.com"です。
-
ドメインに同じ名前の信頼ドキュメントが存在するシナリオでは、createWSMTokenIssuerTrustDocument('trust-doc',None)の実行中にエラー・メッセージが表示されますが、無視して次のコマンドに進んでください。
-
-
WLSTを使用したOWSMでの信頼ドキュメントの構成
wls:/jrfServer_domain/serverConfig/> beginWSMSession() Session started for modification. true wls:/jrfServer_domain/serverConfig/> createWSMTokenIssuerTrustDocument('trust-doc',None) New Token Issuer Trust document named "trust-doc" created. To use the new document in the domain configuration,you must run the setWSMConfiguration command where category = "TokenIssuerTrust", property name = "name" and value = "trust-doc". true wls:/jrfServer_domain/serverConfig/> setWSMConfiguration(None, 'TokenIssuerTrust', 'name', None, ['trust-doc']) A new property "name" within category "TokenIssuerTrust" has been added. The values "[trust-doc]" have been added to property "name" within category "TokenIssuerTrust". Configuration properties associated with the context "/WLS/jrfServer_domain" has been created. true wls:/jrfServer_domain/serverConfig/> selectWSMTokenIssuerTrustDocument('trust-doc') Token Issuer Trust document named "trust-doc" selected in the session. true wls:/jrfServer_domain/serverConfig/> setWSMTokenIssuerTrust('dns.jwt','https://identity.oraclecloud.com/',['CN=orclMT123232_idm, DC=cloud, DC=oracle, DC=com']) New issuer - "https://identity.oraclecloud.com/" added to the document. Issuer set with the given trusted keys. The issuer and trusted DN values have been updated successfully. true wls:/jrfServer_domain/serverConfig/> setWSMTokenIssuerTrustAttributeFilter('CN=orclMT123232_idm, DC=cloud, DC=oracle, DC=com', 'user.tenant.name',['owsm']) New TokenAttributeRule added for DN: CN=orclMT123232_idm, DC=cloud, DC=oracle, DC=com. true wls:/jrfServer_domain/serverConfig/> commitWSMSession() The tokenissuertrust trust-doc is valid. Updating tokenissuertrust trust-doc in repository. Session committed successfully. true
3.6 OWSM OAuth 2.0セキュリティ・ポリシーを使用したJAX-RS RESTクライアントの保護
次のクライアント側のOWSMポリシーを使用してRESTサービスを保護します。
クライアント・ドメインでのキーストアの設定
keystore.sig.csf.keyは、アクセス・トークンのリクエスト中に、OAuthサーバーに発行されたjwtトークンの署名に使用されます。デフォルト値はorakeyです。
クライアント・ドメインでのKSSの作成
wls:/o ffline> connect('weblogic','gumby1234','10.229.140.110:11926') Connecting to t3://10.229.140.110:11926 with userid weblogic ... wls:/jrfServer_domain/serverConfig/> svc = getOpssService(name='KeyStoreService') wls:/jrfServer_domain/serverConfig/> svc.createKeyStore(appStripe='owsm', name='keystore', password='', permission=true) Location changed to domainRuntime tree. This is a read-only tree with DomainMBean as the root MBean. For more help, use help('domainRuntime') Keystore created
キー・ペアは、KSSストアで直接KSS generateKeyPairキーストア操作を使用して生成されます。
generateKeyPairを使用したキー・ペアの生成
wls:/jrfServer_domain/serverConfig/> svc = getOpssService(name='KeyStoreService') wls:/jrfServer_domain/serverConfig/> svc.generateKeyPair(appStripe='owsm', name='keystore', password='', dn='CN=weblogic,OU=MT Orakey Test Encryption Purposes Only,O=Oracle,C=US', keysize='2048', alias='orakey12212ssl', keypassword='') Already in Domain Runtime Tree Key pair generated
クライアント・ドメインからOAuthサーバーのOAuthクライアントへの署名証明書のインポート
-
KSSキーストアから署名証明書をエクスポートします。キー・ペアの生成で使用される別名を使用します。
証明書のエクスポート
wls:/jrfServer_domain/serverConfig/> svc = getOpssService(name='KeyStoreService') wls:/jrfServer_domain/serverConfig/> svc.exportKeyStoreCertificate(appStripe='owsm', name='keystore', password='', alias='orakey12212ssl', keypassword='', type='TrustedCertificate',filepath='/scratch/ankianja/orakey12212nonssl.pem') Already in Domain Runtime Tree Certificate exported.
-
OAuth構成に移動し、クライアントを変更します。「信頼できる」をクリックし、「インポート」ボタンをクリックして、先ほど作成した証明書ファイルをアップロードします。
クライアント・ドメイン資格証明ストアにおけるOAuthクライアントのcsfキーの作成
oauth2.client.csf.keyは、アクセス・トークンのリクエスト中に、OAuthサーバーに対する認証に使用されます。デフォルト値は"basic.client.credentials"です。
ノート:
パスワード資格証明の作成に使用されるユーザー名とパスワードは、IDCSでのOAuthクライアントの構成時に取得したクライアントIDとクライアント・シークレットです。OAuthクライアント資格証明の作成
wls:/jrfServer_domain/serverConfig/> createCred(map="oracle.wsm.security",key="idcs.oauth2.client.credentials",user="38ef42fdb92e467b935b138f6b02d211",password="0407ebb3-ec75-4cae-9132-8243ab3d853c",desc="OAuth Client user for MT") Credential created successfully.
OAuthクライアントのOWSM WSポリシーを使用したRESTクライアントの保護
ポリシー |
説明 |
|
このポリシーは、HTTPヘッダーにOAuth2アクセス・トークンを含めます。アクセス・トークンは、IDCS OAuthサーバーから取得します。 このポリシーは、SSLを通じてサービスを呼び出す任意のHTTPベース、SOAPまたはRESTクライアントに割り当てることができます。 |
|
このポリシーは、クライアント側のOAuth2サーバー情報を提供します。 このポリシーは、OAuth2トークン・クライアント・ポリシーも割り当てる場合にのみ実行されます。それ以外の場合、このパラメータは無視されます。通常、このポリシーは、グローバルに割り当てられます。 |
oauth2_config_client_policyのGPAとしての割当て
ノート:
OAuth2サーバーのトークン・エンドポイントの値を"token.uri"として指定します。次の例では、'token.uri'はhttps://owsm.identity.c9dev0.oc9qadev.com:443/oauth2/v1/token
に設定されていますwls:/jrfServer_domain/serverConfig/> beginWSMSession() Session started for modification. true wls:/jrfServer_domain/serverConfig/> createWSMPolicySet('oauth-ps', 'rest-client', 'Domain("*")', 'Policy set forAll Rest Clients', 'true') The policy set was created successfully in the session. true wls:/jrfServer_domain/serverConfig/> attachWSMPolicy('oracle/oauth2_config_client_policy') Policy reference "oracle/oauth2_config_client_policy" added. true wls:/jrfServer_domain/serverConfig/> setWSMPolicyOverride('oracle/oauth2_config_client_policy','token.uri','https://owsm.identity.c9dev0.oc9qadev.com:443/oauth2/v1/token') The configuration override property "token.uri" having value "https://owsm.identity.c9dev0.oc9qadev.com:443/oauth2/v1/token" has been added to the reference to policy with URI "oracle/oauth2_config_client_policy". wls:/jrfServer_domain/serverConfig/> setWSMPolicyOverride('oracle/oauth2_config_client_policy', 'oauth2.client.csf.key', 'idcs.oauth2.client.credentials') wls:/jrfServer_domain/serverConfig/> commitWSMSession() INFO: Attachment of an oauth2 config policy without any oauth2 client policy is invalid. Ensure you attach a valid oauth2 policy either via Direct Policy Attachment or via Global Policy Attachment along with an oauth2 config policy. The policy set oauth-ps is valid. Creating policy set oauth-ps in repository. Session committed successfully. true
grantPermission(appStripe=None,codeBaseURL='file:${common.components.home}/modules/oracle.wsm.common/wsm-agent-core.jar',principalClass=None,principalName=None,permClass='oracle.wsm.security.WSIdentityPermission',permTarget='resource=idcsclientapp', permActions='assert')
ノート:
クライアントのみのフローの場合、WebLogicセキュリティ・レルムで、clientId/clientsecretを使用してユーザーを作成します。http_oauth2_token_over_ssl_idcs_client_policyを使用して、サーブレット・クライアント・コードを更新します
public void testJaxRsHttpOAuth2ClientCredsJwtMT( Map<, String> config) { String BASE_URI = "https://den01zxb.us.oracle.com:7002/idcsserviceapp/test/helloworld"; PropertyFeature scope = new PropertyFeature( SecurityConstants.ConfigOverride.CO_SCOPE, "http://owsm/idcs_test"); PropertyFeature signCsfKey = new PropertyFeature(SecurityConstants.ConfigOverride.CO_SIG_CSF_KEY, "orakey12212ssl"); PolicyReferenceFeature[] clientPRF = new PolicyReferenceFeature[] { new PolicyReferenceFeature("oracle/http_oauth2_token_over_ssl_idcs_client_policy", scope, signCsfKey) }; ClientConfig cc = new ClientConfig(); cc.property(AbstractPolicyFeature.ABSTRACT_POLICY_FEATURE,new PolicySetFeature(clientPRF)); Client client = ClientBuilder.newClient(cc); WebTarget webTarget = client.target(BASE_URI); String res = webTarget.request("text/plain").header("X-RESOURCE-IDENTITY-SERVICE-GUID","owsm").get(String.class); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>IDCSClientServlet</title></head>"); out.println("<body>"); out.println("<p>The servlet has received a GET. This is the reply.</p>"); out.println("<p>" + res + "</p>"); out.println("</body></html>"); out.close(); }