OAuthクライアント・シークレット取得の管理

イントロダクション

Oracle Access Management (OAM)を使用して、OAuthプロバイダおよびアプリケーションとの対話に使用するOAuthクライアントを作成できます。デフォルトでは、作成されたOAuthクライアント・シークレットはハッシュされて格納され、取得できないため使用できません。2022年10月のバンドル・パッチ以降、OAuthクライアントのシークレットを使用可能な形式で取得できます。管理者は、OAuthクライアント・リカバリ機能を有効にして、クライアント・シークレットを取得する必要があります。シークレットを取得する前に、パッチの前に作成された古いOAuthクライアントを更新/リセットする必要があります。OAuthクライアント・シークレット・リカバリ機能が無効になっている場合、OAuthクライアントGET APIは、2022年10月BPの適用後でも、ハッシュ形式(使用不可)でシークレットを返します。

目的

Oracle Access ManagementでOAuthサービスを設定します。

前提条件

タスク1: OAM OAuthクライアント・シークレット・リカバリの有効化

  1. 構成に応じて、この機能をオンまたはオフにできます。構成が存在しない場合、OAMは機能がオフであると想定します。構成設定パス: /DeployedComponent/Server/NGAMServer/Profile/ssoengine/OAuthConfig 構成設定名: ClientSecretRecoveryEnabled次のコマンドを使用すると、クライアント・シークレット・リカバリが有効か無効かを確認できます。

    curl --location --request GET 'https://<admin-host>:<admin-port>/iam/admin/config/api/v1/config?path=/DeployedComponent/Server/NGAMServer/Profile/ssoengine/OAuthConfig' --header 'Authorization: <Basic Authz Header>'
    

    図config_does_not_exist.jpgの説明

  2. 構成が存在しないか無効になっている場合(false)、次のコマンドを実行して、値をtrueに追加/更新します。ノート: 値がすでに存在し、trueに設定されている場合は、このステップをスキップします。

    curl --location --request PUT 'https://<admin-host>:<admin-port>/iam/admin/config/api/v1/config?path=/DeployedComponent/Server/NGAMServer/Profile/ssoengine/OAuthConfig' --header 'Authorization: <Basic Authz Header>' /--header 'Content-Type: application/xml' --data-raw '<Setting Name="OAuthConfig" Type="htf:map" Path="/DeployedComponent/Server/NGAMServer/Profile/ssoengine/OAuthConfig"> <Setting Name="ClientSecretRecoveryEnabled" Type="xsd:boolean">true</Setting></Setting>'
    

    図updating_config_to_true.jpgの説明

    ステップ1のGET APIを使用して、値が正常に更新されたことを確認します。

タスク2: OAuthクライアント詳細の取得- 新しく作成されたクライアント用

クライアントでシークレット・リカバリ機能が有効になっている場合、GETクライアントAPIはBasic <base64 encoded id:secret>の形式でシークレットを返します。

  1. 次の属性を使用してクライアントを作成します。

    • クライアント名: SampleClientNew1
    • クライアントID: SampleClientNew1_id
    • シークレット: client_secret
  2. OAuthクライアントAPIを使用して、クライアントの詳細を取得します。

    curl --location --request GET 'https://<admin-host>:<admin-port>/oam/services/rest/ssa/api/v1/oauthpolicyadmin/client?identityDomainName=SampleDomain&name=SampleClientNew1' --header 'Authorization: <Basic Authz Header>' --header 'Accept: application/json'
    

    返されるシークレットは、Basic U2FtcGxlQ2xpZW50TmV3MV9JZDpjbGllbnRfc2VjcmV0 Base 64 Decoded値: SampleClientNew1_Id:client_secretです

    図get_new_client.jpgの説明

タスク3: OAuthクライアント詳細の取得- 既存のクライアント用

シークレット・リカバリ機能が有効化される前に作成されたクライアントでは、機能がリセット/更新されないかぎり、シークレットはリカバリできません。GETクライアントAPIは、機能をリセットして値を取得するメッセージを返します。

  1. 次の属性を使用してクライアントを作成します。

    • クライアント名: SampleClientOld1
    • クライアントID: SampleClientOld1_id
    • シークレット: client_secret
  2. OAuthクライアントAPIを使用して、クライアントの詳細を取得します。

    curl --location --request GET 'https://<admin-host>:<admin-port>/oam/services/rest/ssa/api/v1/oauthpolicyadmin/client?identityDomainName=SampleDomain&name=SampleClientOld1' --header 'Authorization: <Basic Authz Header>' --header 'Accept: application/json'    
    
    

    図get_old_client.jpgの説明

    メッセージは次のようになります: OAMSSA-06399: 現在のシークレットはリカバリできません。秘密鍵をリセットして復元可能にしてください。

  3. OAuthクライアントAPIを使用して、クライアント・シークレットを更新します。

    curl --location --request PUT 'https://<admin-host>:<admin-port>/oam/services/rest/ssa/api/v1/oauthpolicyadmin/client?identityDomainName=SampleDomain&name=SampleClientOld1' --header 'Content-Type: application/json' --header 'Accept: application/json'  --header 'Authorization: <Basic Authz Header>' --data-raw  '{ "secret": "client_secret_new"  }'
    

    図client_secret_modify.jpgの説明

    新しいシークレット: client_secret_new

  4. OAuthクライアントAPIを使用して、更新されたクライアント詳細を取得します。GETクライアントAPIは、Basic <base64 encoded id:secret>という形式でシークレットを返します。

    curl --location --request GET 'https://<admin-host>:<admin-port>/oam/services/rest/ssa/api/v1/oauthpolicyadmin/client?identityDomainName=SampleDomain&name=SampleClientOld1' --header 'Authorization: <Basic Authz Header>' --header 'Accept: application/json'
    
    

    図get_old_client_post_modify.jpgの説明

    返されるシークレットは、Basic U2FtcGxlQ2xpZW50T2xkMV9JZDpjbGllbnRfc2VjcmV0X25ldw== Base 64 Decoded値: SampleClientOld1_Id:client_secret_newです

  5. 構成ClientSecretRecoveryEnabledがfalseに更新されると、GET OAuthクライアントAPIは、base64エンコードされた結果(2022年10月以前のバンドル・パッチ動作)のかわりにハッシュ・シークレットを返します。

謝辞

その他の学習リソース

docs.oracle.com/learnで他のラボを探すか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。