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管理コンソールへのアクセス権を取得します。

始める前に、次のことを確認してください。

3.3 WLSを使用したIDCSセキュリティ・プロバイダの構成

OracleIdentityCloudIntegratorという単一のセキュリティ・プロバイダによって、アイデンティティ・アサーションと認証が結合されます。このセキュリティ・プロバイダは、WLSがIDCSでユーザーを認証できるように、OAuthクライアントに関連付けられます。

IDCSセキュリティ・プロバイダのインストール

注意:

デフォルトではIDCSにWebLogicブート・ユーザーは存在しないため、ブート・ユーザーを含む認証プロバイダが必要です。ブート・ユーザーが埋込みLDAPに格納される場合、ブート用にDefaultAuthenticatorが必要です。

次のステップに従って、WLSでOracleIdentityCloudIntegratorをインストールおよび構成します。

OracleIdentityCloudIntegratorセキュリティ・プロバイダはWLSに含まれます。

IDCSからのOAuthクライアントの取得

IDCSセキュリティ・プロバイダは、WLSがIDCSでユーザーを認証できるように、OAuthクライアントに関連付けられます。このOAuthクライアントは、IDCSインスタンスに登録され、セキュリティ・プロバイダによるIDCSへのアクセスを許可します。次に示すプロパティは、IDCSセキュリティ・プロバイダが必要とするもので、OAuthクライアントは少なくともこの3つを提供します。

プロパティ名

コメント

ClientTenant

文字列

OAuthクライアントがプロビジョニングされたテナント名

ClientId

文字列

IDCSユーザー・ストアへのアクセスに使用されるOAuthクライアントID

ClientSecret

文字列

アクセス・トークンを生成するためのOAuthクライアント・シークレット(パスワード)

注意:

OAuthクライアントは、それがプロビジョニングされた特定のIDCSテナント内で使用されます。このクライアントを使用して他のIDCSテナントにアクセスする要件が生じた場合は、クロス・テナントIDCS AppRoleがクライアントに付与されます。
  1. アイデンティティ・ドメイン管理者IDCS AppRoleを使用したOAuthクライアントの設定

    1. テナント管理者としてIDCS管理コンソールにログインします

    2. 「アプリケーション」タブにアクセスして、「追加」を選択します

    3. 「信頼できるアプリケーション」オプションを選択して、設定ウィザードで次に示すステップに従います。
      • クライアントの名前と説明を入力して、「次」を選択します

      • 「このアプリケーションをクライアントとして今すぐ構成します」を選択します

      • 「許可される権限付与タイプ」のみに「クライアント資格証明」オプションを選択します

      • 「Identity Cloud Service管理APIへのクライアント・アクセス権を付与します」のボックスを選択します

      • 白いドロップダウン・ボックスをクリックして、「アイデンティティ・ドメイン管理者」を選択します

      • その他のオプションを空白のままにして、「次」を選択します

      • 「終了」を選択します。

    4. ログイン用のクライアントID、クライアント・シークレットおよびテナント名の記録

    5. 次のステップに従って、新しいアプリケーションをアクティブ化し、OAuthクライアントがアクティブ化されたことを確認します。
      • 「アプリケーション」タブにアクセスします

      • 新たに作成されたアプリケーションを選択します

      • メニュー・バーの「アクティブ化」をクリックします。

  2. 必要に応じて、追加のIDCSテナントにアクセスするためのOAuthクライアントを設定します。次のいずれかのオプションを使用して、追加のIDCSテナントへのアクセス権を付与できます。

    オプション1: CTAppRoleGranter JSONを使用した付与
    CTAppRoleGranter.json
    {
        "schemas": [
            "urn:ietf:params:scim:schemas:oracle:idcs:CrossTenantAppRoleGranter"
        ]
    }
  3. オプション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の構成

OAuth2クライアントとOAuth2サービスはIDCSで登録されます。

次の項を参照してください。

3.4.1 IDCSでのOAuth2サービスの登録

IDCSで新しいリソース・アプリケーションが構成されて、そのリソース・アプリケーションにリソースのURLが追加されます。

IDCSでの新しいリソース・アプリケーションの構成

次のステップに従って、IDCSで新しいリソース・アプリケーションを構成します。

  1. IDCS管理コンソールにログインします

  2. 「アプリケーション」タブを選択します

  3. 新規アプリケーションを追加します

  4. アプリケーション・ウィザードで、「Webアプリケーション」を選択し、詳細を指定します

  5. ウィザードで、クライアント構成のスキップを選択して次のページに移動します

  6. リソース・ページで、スコープ、プライマリ・オーディエンスおよびセカンダリ・オーディエンスを指定します

  7. ウィザードを終了します

  8. アプリケーションを保存します

  9. 「アクティブ化」をクリックして、アプリケーションをアクティブ化します。

注意:

"RSApp"アプリケーションがテスト用に作成されます。セカンダリ・オーディエンスとしてリソースURLをさらに追加し、テスト・リソースと統合できます。

IDCSのリソース・アプリケーションにリソースのURLを追加

次のステップに従って、リソースのURLをIDCSのリソース・アプリケーションに追加します。

  1. IDCS管理コンソールにログインします

  2. 「アプリケーション」タブに移動します

  3. "RSApp"アプリケーションを選択します

  4. 「構成」タブに移動します

  5. 「リソース」セクションを展開します

  6. セカンダリ・オーディエンスに対するURLを入力します

  7. 「追加」(セカンダリ・オーディエンスに対するもの)をクリックして、セカンダリ・オーディエンスを追加します

  8. 「保存」をクリックして、アプリケーションへの変更を保存します。

3.4.2 IDCSでのOAuth2クライアントの構成

IDCSにOAuth2クライアントが構成されます。

次のステップに従って、IDCSにOAuth2クライアントを構成できます。

  1. IDCS管理コンソールにログインします

  2. 「アプリケーション」タブに移動します

  3. 新規アプリケーションを追加します

    注意:

    クライアント・アプリケーションは、リソース・アプリケーションとは異なります。
  4. アプリケーション・ウィザードで、「Webアプリケーション」を選択し、詳細を指定します

  5. 「クライアント構成」で、クライアントを登録して、次の情報を指定します。
    • 権限付与タイプ

    • クライアント・タイプ

    • クライアント証明書のインポート

    • 許可されているスコープの追加

      注意:

      スコープは、すでに追加されているリソース・アプリケーションから選択されます。
    • Identity Cloud Service管理APIへのクライアント・アクセス権を付与します。 - 「アイデンティティ・ドメイン管理者」を選択します。

  6. ウィザードを終了します

  7. アプリケーションを保存します

  8. 「アクティブ化」をクリックして、アプリケーションをアクティブ化します。

注意:

"ClientApp"アプリケーションがテスト用に作成されます。クライアントIDとクライアント・シークレットをメモします。

3.5 OWSM OAuth2セキュリティ・ポリシーを使用したJAX-RS RESTサービスの保護

次のサービス側のOWSM WSポリシーを使用してRESTサービスを保護します。

ポリシー

説明

oracle/multi_token_over_ssl_rest_service_policy

クライアントが送信するトークンに基づいて、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署名証明書のインポート

  1. 次のクライアント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}
    
  2. 先ほど取得したアクセス・トークンを使用して、署名証明書を取得します。

    署名証明書を取得するための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"}]}
    
  3. "-----BEGIN CERTIFICATE-----""-----END CERTIFICATE-----"の間に同じものを入れ、前述のレスポンスの証明書部分ごとに証明書ファイルを作成します

  4. 1つ目の証明書をidcs.cert、2つ目の証明書をidcs-ca.certとして保存します

  5. 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.
    

サービス・ドメインの信頼への信頼できる発行者の構成

次のステップに従うと、信頼できる発行者がサービス・ドメインに構成され、信頼できる発行者のエージェント信頼ドキュメントに信頼エントリが追加されます。

  1. 証明書の出力
    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)の実行中にエラー・メッセージが表示されますが、無視して次のコマンドに進んでください。

  2. 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クライアントへの署名証明書のインポート

  1. 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.
    
  2. 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クライアントの保護

RESTクライアントを保護するためのOAuthクライアントのOWSM WSポリシーは、次のとおりです。

ポリシー

説明

oracle/http_oauth2_token_over_ssl_idcs_client_policy

このポリシーは、HTTPヘッダーにOAuth2アクセス・トークンを含めます。アクセス・トークンは、IDCS OAuthサーバーから取得します。

このポリシーは、SSLを通じてサービスを呼び出す任意のHTTPベース、SOAPまたはRESTクライアントに割り当てることができます。

oracle/oauth2_config_client_policy

このポリシーは、クライアント側のOAuth2サーバー情報を提供します。

このポリシーは、OAuth2トークン・クライアント・ポリシーも割り当てる場合にのみ実行されます。それ以外の場合、このパラメータは無視されます。通常、このポリシーは、グローバルに割り当てられます。

oauth2_config_client_policyのGPAとしての割当て

WLSTに接続して、次のコマンドを実行し、oauth2構成ポリシーの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
クライアント・アプリケーションに対するWSMアイデンティティ権限の付与
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();
 }