管理 OAuth 用戶端密碼擷取

簡介

您可以使用 Oracle Access Management (OAM),建立用於與 OAuth 提供者和應用程式互動的 OAuth 從屬端。依照預設,建立之後的 OAuth 用戶端密碼會儲存雜湊,無法加以擷取。從 2022 年 10 月的搭售品修補程式開始,您可以用可用的形式擷取 OAuth 用戶端的加密密碼。管理員必須啟用 OAuth 從屬端復原功能,才能擷取從屬端加密密碼。必須先更新 / 重設修正程式之前建立的舊 OAuth 從屬端,才能擷取加密密碼。如果停用 OAuth 從屬端加密密碼復原功能,即使在套用 2022 年 10 月 BP 之後,OAuth 從屬端 GET API 也會傳回雜湊形式 (不可使用) 的加密密碼。

目標

在 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