在 Liberty 中配置「OpenID Connect 用戶端」

您可以將 Liberty 伺服器配置成擔任「OpenID Connect 用戶端」或「依賴方」,以充分利用 Web 單一登入,以及使用「OpenID Connect 提供者」作為身分提供者。

關於這項作業

您可以在 Liberty 中啟用 openidConnectClient-1.0 特性,外加提供其他的配置資訊,將 Liberty 伺服器配置成擔任「OpenID Connect 用戶端」。

程序

  1. server.xml 檔中新增 openidConnectClient-1.0 Liberty 特性和其他任何必要特性。openidConnectClient-1.0 特性也需要 ssl-1.0 特性。在 server.xml 檔中,將下列元素宣告新增到 featureManager 元素內:
    <feature>openidConnectClient-1.0</feature> 	
    <feature>ssl-1.0</feature>
  2. 配置 openidConnectClient 元素。下列範例是最基本的配置,如此才能與預設 Liberty 伺服器的「OpenID Connect 提供者」搭配運作。

    用戶端必須在給定的 URL 型樣中提供一個已配置的應用程式,且其可以處理來自「OpenID Connect 提供者」的重新導向要求。這個 URL 也必須完全符合用戶端向 OP 登錄的重新導向 URL。

    註: 在本例中,用戶端預期的 SSL 埠設為 443。
    <openidConnectClient id="client01" 		
        clientId="client01" 		
        clientSecret="{xor}LDo8LTor" 		
        authorizationEndpointUrl="https://server.example.com:443/oidc/endpoint/OidcConfigSample/authorize" 		
        tokenEndpointUrl="https://server.example.com:443/oidc/endpoint/OidcConfigSample/token"> 	
    </openidConnectClient>
    在這個最基本的配置範例中,會假設下列預設值:
    • scope=openid profile:需要 openid 範圍,且您可以使用 scope 屬性來編輯必要範圍。舉例來說,您可以將必要 scope 變更為 openid profile email
    • 此 RP 會向 OP 將其重新導向 URL 登錄為 https://<host name>:<ssl port>/oidcclient/redirect/client01,其中,會自動解析主機名稱和 ssl 埠,且 client01openidConnectClient 配置元素的 ID。若有 Proxy 位於 RP 前面,您可以使用 redirectToRPHostAndPort 屬性置換主機名稱和埠,並將 redirectToRPHostAndPort 設為 https://<host name>:<ssl port>
  3. 配置使用者登錄。依預設,OP 傳回的使用者身分不會對映至登錄使用者,因此不需在登錄中配置任何使用者。不過,如果 openidConnectClient 元素的 mapIdentityToRegistryUser 屬性設為 true,則 OP 所傳回的適當身分必須有一個使用者項目,這樣鑑別和授權才會成功。如需配置使用者登錄的相關資訊,請參閱在 Liberty 中配置使用者登錄
  4. 配置伺服器的信任儲存庫,以包含支援的「OpenID Connect 提供者」簽章者憑證。如需金鑰儲存庫的相關資訊,請參閱在 Liberty 中啟用 SSL 通訊
  5. 修改伺服器的 SSL 配置,以使用所配置的信任儲存庫。
    <sslDefault sslRef="DefaultSSLSettings" />
    <ssl id="DefaultSSLSettings" keyStoreRef="myKeyStore" trustStoreRef="myTrustStore" /> 	
    <keyStore id="myKeyStore" password="{xor}EzY9Oi0rJg==" type="jks" location="${server.config.dir}/resources/security/BasicKeyStore.jks" /> 	
    <keyStore id="myTrustStore" password="{xor}EzY9Oi0rJg==" type="jks" location="${server.config.dir}/resources/security/BasicTrustStore.jks" />

    OpenID Connect 是配置成使用伺服器指定的預設 SSL 配置。因此,伺服器的預設 SSL 配置必須使用配置給 OpenID Connect 的信任儲存庫。

  6. 選用:配置協力廠商 OpenID Connect 提供者。

    如果要將 Liberty OpenID Connect 用戶端配置成使用協力廠商「OpenID Connect 提供者」 (例如 Microsoft Azure 或 Google),您必須配置下列屬性。如果要取得屬性值,可呼叫 OP 的探索端點,這會在 /.well-known/openid-configuration 字串配上發證者而形成的路徑中提供 JSON 文件。

    1. jwkEndpointUrl 屬性設為 OP JSON Web 金鑰集 JWK 文件的 URL,這在探索檔案中是定義成 jwks_uri。舉例來說,如果要使用 Google 的 OP,您可以設定 jwkEndpointUrl = "https://www.googleapis.com/oauth2/v2/certs"
    2. issuerIdentifier 屬性設為探索檔案中所定義的 issuer。如果 ID 記號沒有包含此值來作為 iss 聲明,則會被拒絕。舉例來說,如果您使用 Google 作為您的 OP,您可以設定 issuerIdentifier="accounts.google.com"
    3. 設定 signatureAlgorithm="RS256"。Liberty OpenID Connect 用戶端的預設簽章演算法是 HS256。
    4. userIdentityToCreateSubject 屬性設為供應商 ID 記號所使用的聲明名稱,以代表使用者的唯一 ID。舉例來說,如果您使用 Google 的 OP,可設定 userIdentityToCreateSubject ="email",如果您使用 Microsoft Azure,可設定 userIdentityToCreateSubject ="upn"userIdentityToCreateSubject ="unique_name"
    5. groupIdentifier 屬性設為代表使用者的群組成員資格或角色的聲明名稱。舉例來說,如果您使用 Microsoft Azure,可設定 groupIdentifier="groups"

    如需其他的「OpenID Connect 用戶端」配置選項,請參閱OpenID Connect Client

  7. 選用:鑑別過濾器。

    當啟用 openidConnectClient-1.0 特性時,如果沒有使用 authFilterRef 屬性來配置 openidConnectClient 元素,任何未經鑑別的要求,都會經由 OpenID Connect 提供者來鑑別。

    如需配置鑑別過濾器的相關資訊,請參閱鑑別過濾器

  8. 支援多個 OpenID Connect 提供者。

    您可以建立多個 openidConnectClient 元素和多個「鑑別過濾器」,以便將 Liberty 配置成多個「OpenID Connect 提供者」的「OpenID Connect 依賴方」。每一個 openidConnectClient 元素各與一個「OpenID Connect 提供者」之間定義一項「單一登入」關係,並使用 authFilterRef 屬性,來參照一個「鑑別過濾器」。

  9. 配置支援的「ID 記號」簽章演算法。

    您可以配置 Liberty OpenID Connect 用戶端,以便在「ID 記號」中支援 RS256 簽章演算法。Liberty OpenID Connect 用戶端的預設簽章演算法是 HS256。如果您設定 signatureAlgorithm="RS256",將 RS256 配置成「ID 記號」的簽章演算法,除非 OP 支援 JWK 端點,您必須同時配置 trustStoreReftrustAliasName

  10. 選用:配置「隱含的」授權類型。

    openidConnectClient-1.0 特性使用「授權碼」授權類型,來要求使用者鑑別記號,您可以配置 Liberty openidConnectClient-1.0 特性,以使用「隱含的」授權類型,作法是在 server.xml 檔中新增 grantType="implicit"。如果您的 Liberty 伺服器和 OpenID Connect 提供者位於不同的防火牆,則必須使用這個配置選項。

  11. 選用:在處理「ID 記號」之後,Liberty OpenID Connect 依賴方會自動建立單一登入 (SSO) 記號。您可以新增 disableLtpaCookie="true" 配置內容,將 Liberty 配置成不為伺服器建立 SSO 記號,或不為以 OpenID Connect 保護的資源建立 SSO 記號。如果設定 disableLtpaCookie="true",則 Liberty OpenID Connect 用戶端只接受先前已經過所配置之 OpenID Connect 提供者鑑別的鑑別要求,且鑑別階段作業生命期限會限定為「ID 記號」的生命期限。
  12. 選用:您可以將「OpenID Connect 用戶端」配置成選擇性地接受有效的 OAuth 2.0 載送存取記號作為鑑別記號,而不將要求重新導向至 OpenID Connect 提供者。如果要求含有有效的 OAuth 2.0 載送存取記號,「Liberty OpenID Connect 用戶端」會自動驗證該存取記號,並根據記號驗證結果,建立一個已鑑別的主體。如果要求沒有包含存取記號,或存取記號無效,「Liberty OpenID Connect 用戶端」會繼續將使用者重新導向至 OpenID Connect 提供者。此功能可讓 Liberty 伺服器同時處理瀏覽器用戶端和非瀏覽器用戶端 (例如 RESTful 用戶端)。您可以新增 inboundPropagation=”supported” 至配置,以啟用這項功能。
  13. [16.0.0.4 以及更新版本]如果您的主機環境不容許存取 /oidcclient 環境定義根目錄,請配置 oidcClientWebapp 元素,以修改環境定義根目錄。

    依預設,「Liberty OpenID Connect 用戶端」的重新導向 Servlet 會接聽 /oidcclient 環境定義根目錄,且其重新導向 URL 格式是 https://<host_name>:<ssl_port>/oidcclient/redirect/<configuration_ID>。 如果您無法使用這個環境定義根目錄,請在伺服器配置中設定不同的環境定義根目錄。

    舉例來說,如果您的主機環境需要您使用 /acme/openid 環境定義根目錄,請新增下列元素:
    <oidcClientWebapp contextPath="/acme/openid" />

    產生的重新導向 URL 格式是 https://<host_name>:<ssl_port>/acme/openid/redirect/<configuration_ID>

結果

現在,您已建立所需的最基本配置,如此就能將 Liberty 伺服器配置成「OpenID Connect 用戶端」,並且能夠與配置成「OpenID Connect 提供者」的其他 Liberty 伺服器通訊。

指示主題類型的圖示 作業主題



「時間戳記」圖示 前次更新: 2016 年 11 月 30 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_config_oidc_rp
檔名:twlp_config_oidc_rp.html