Liberty 中配置「OpenID Connect 提供者」

您可以將 Liberty 伺服器配置成當作「OpenID Connect 提供者」或授權伺服器,以充分利用 Web 單一登入。

關於這項作業

您可以在 Liberty 中啟用 openidConnectServer-1.0 特性,外加其他的配置資訊,將 Liberty 伺服器配置成作為「OpenID Connect 提供者」。

程序

  1. server.xml 檔中新增 openidConnectServer-1.0 Liberty 特性和其他任何必要特性。openidConnectServer-1.0 特性也需要 ssl-1.0 特性。
    <feature>openidConnectServer-1.0</feature>
    <feature>ssl-1.0</feature>
  2. 定義 OAuth 服務提供者。OpenID Connect 建置在 OAuth 2.0 通訊協定之上,因此您必須配置有效的 OAuth 服務提供者。OAuth 服務提供者的配置包括適當的 oauth-rolesoauthProvider 和使用者登錄元素。只要使用者獲授權使用 OpenID Connect,也必須對映至 authenticated oauth-role。如需相關資訊,請參閱定義 OAuth 服務提供者

    會更新 OpenID Connect 的 OAuth meta 資料,並在用戶端 meta 資料中新增主要項目。如果您的用戶端登錄使用 databaseStore 模式,請參閱將「OpenID Connect 提供者」配置成接受用戶端登錄要求。建議您遵循文件來管理用戶端。如果您的用戶端登錄使用 localStore 模式,您可以登錄 scopepreAuthorizedScopegrantTypesresponseTypesintrospectTokensfunctionalUserId,以及其他屬性。

  3. 新增 openidConnectProvider 元素,並使其 oauthProviderRef 屬性參照所配置的 oauthProvider。每一個 oauthProvider 只能有一個 openidConnectProvider 參照它,不能有二或多個 openidConnectProvider 元素參照相同的 oauthProvider。用戶端元素的 name 屬性和 secret 屬性必須符合對應「OpenID Connect 用戶端」的 client IDclient secret。這個範例使用預設 Liberty 伺服器「OpenID Connect 用戶端」。
    註: 在本例中,OP 預期用戶端的 SSL 埠設為 443。
    <openidConnectProvider id="OidcConfigSample" oauthProviderRef="OAuthConfigSample" /> 
    
    <oauthProvider id="OAuthConfigSample"> 
    <localStore>
    <client name="client01" secret="{xor}LDo8LTor"
    displayname="client01"
    scope="openid profile email"
    redirect="https://server.example.com:443/oidcclient/redirect/client01"/>
    </localStore>
    </oauthProvider>
    註: 若為 authorization_code 授權類型,有效的用戶端必須登錄其名稱、重新導向、範圍和密碼。
  4. 配置伺服器的信任儲存庫,以包含支援的「OpenID Connect 依賴方」(或用戶端)簽章者憑證。如需金鑰儲存庫的相關資訊,請參閱在 Liberty 中啟用 SSL 通訊
  5. 修改伺服器的 SSL 配置,以使用所配置的信任儲存庫。
    <sslDefault sslRef="DefaultSSLSettings" /> 	
    <ssl id="DefaultSSLSettings" keyStoreRef="myKeyStore" trustStoreRef="myTrustStore" /> 	
    <keyStore id="myKeyStore" password="{xor}Lz4sLCgwLTs=" type="jks" location="${server.config.dir}/resources/security/BasicKeyStore.jks" /> 
    <keyStore id="myTrustStore" password="{xor}Lz4sLCgwLTs=" type="jks" location="${server.config.dir}/resources/security/BasicTrustStore.jks" />

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

    OpenID Connect 中的使用者同意表單是可外掛的,這可讓提供者建立和維護自己的同意表單。由於這份表單是經由 SSL 擷取,您必須配置信任儲存庫,使其包含管理該同意表單之伺服器的簽章者憑證。如果使用預設同意表單,且用於 OpenID Connect 的信任儲存庫是配置成不同於 Liberty 伺服器使用的金鑰儲存庫,您必須將 Liberty 伺服器的簽章者憑證匯入至 OpenID Connect 信任儲存庫。

    [17.0.0.3 以及更新版本]除了如範例所示使用 SSL 預設配置,也可以在 sslDefault 元素上利用 outboundSSLRef 屬性來配置出埠預設 SSL 配置。如果指定了出埠預設屬性,進行出埠連線時,會使用 outboundSSLRef 屬性指定的 SSL 配置。您可以置換預設值,並使用 SSL 配置中的出埠 SSL 過濾器,來指定用於出埠連線的主機和埠。如需相關資訊,請參閱SSL 配置的出埠過濾器配置出埠通訊的 SSL 設定

    註: 如果要使用 OpenID Connect,scope 屬性必須將 openid 包含在範圍清單中。

    如需其他的「OpenID Connect 提供者」配置選項,請參閱 OpenID Connect 提供者

    如需其他的 OAuth 配置選項,請參閱 Oauth

  6. [16.0.0.3 以及更新版本]選用:配置 Liberty OpenID Connect 提供者來發出「JSON Web 記號 (JWT)」記號作為 access_token 記號。

    依預設,Liberty 會發出不透明的 access_token 記號。 不透明記號要求記號接受者回呼發出記號的伺服器。 您可以在 oauthProvider 配置元素中設定 jwtAccessToken="true",或是實作 com.ibm.wsspi.security.oauth20.JwtAccessTokenMediator 服務程式設計介面 (SPI),將 Liberty OpenID Connect 提供者配置成改為發出 JWT 記號,來作為 access_token 記號,且記號內含有記號驗證機制。

    如需介面的相關資訊,請參閱 WebSphere OAuth 2.0 Web 單一登入 SPI,或產品隨附於 ${wlp.install.dir}/dev/spi/ibm/ 目錄中的 Java 說明文件。

  7. [16.0.0.4 以及更新版本]選用:針對 Liberty OpenID Connect 提供者傳送的 id_token 記號,自訂其內容。
    依預設,Liberty OpenID Connect 提供者會發出 id_token 記號,其中含有使用者名稱和群組成員資格資訊。自訂記號內容的作法如下:
    • 實作 com.ibm.wsspi.security.openidconnect.IDTokenMediator SPI,以全面自訂 id_token 內容。SPI 提供最大的彈性,因此您可以建置自己的自訂記號。

      如需介面的相關資訊,請參閱 WebSphere OAuth 2.0 Web 單一登入 SPI,或產品隨附於 ${wlp.install.dir}/dev/spi/ibm/ 目錄中的 Java 說明文件。

    • 在伺服器配置的 openidConnectProvider 元素中,於 customClaims 屬性上列出其他的聲明,以便從「聯合使用者登錄」提取其他的使用者屬性。如果聲明名稱有別於「聯合使用者登錄」中的屬性名稱,請在 claimToUserRegistryMap 元素上,將該聲明名稱對映至該屬性。
      比方說,下列配置新增了數項聲明,並將 alias 聲明對映至 seeAlso 登錄屬性,以及將 lastName 聲明對映至 sn 屬性:
      <openidConnectProvider id="MyOP" oauthProviderRef="MyOauth" customClaims= "alias, email, lastName, employeeType, office">
          <claimToUserRegistryMap alias="seeAlso" lastName="sn"/> 
          ...
      </openidConnectProvider>

      如需相關資訊,請參閱配置 UserInfo 端點所傳回的聲明

  8. [17.0.0.2 以及更新版本]選用:配置 Liberty OpenID Connect 提供者,以便將使用者鑑別委派給社群登入,讓使用者可以使用其社群媒體帳戶來登入。

    當您為 Liberty OpenID Connect 提供者配置社群登入時,使用者可以使用其社群媒體帳戶來登入,而不必針對 Liberty 提供者另建帳戶。如需相關資訊,請參閱在 Liberty 中配置社群登入

  9. 選擇性的: [17.0.0.4 以及更新版本]Liberty OpenID Connect 提供者配置成在用戶端重新導向「統一資源定址器(URL)」中使用正規表示式。
    1. 如果要啟用正規表示式,請將 allowRegexpRedirects 用戶端屬性設為 true
    2. 新增 regexp: 字串的字首,將 URL 評估為正規表示式。 會先檢查沒有正規表示式的 URL。
    3. 當您透過登錄端點來登錄用戶端時,會以您正規表示式中的反斜線 (\) 取代驚嘆號 (!)。
    註: 容許重新導向至非預期的 URL,可能造成安全曝光。如果您使用正規表示式,請確定它們不符合任何您不想容許的 URL。

    在下列範例中,容許重新導向至 https://apphost043.example.com URL,因為 URL 符合正規表示式:

    <openidConnectProvider id="OidcConfigSample" oauthProviderRef="OAuthConfigSample" />
    
    <oauthProvider id="OAuthConfigSample">
       <localStore>
          <client name="client01" secret="{xor}LDo8LTor" displayname="client01" scope="openid profile email" allowRegexpRedirects="true">
               <redirect>"https://apphost.example.com:443/oidcclient/redirect/client01"</redirect>
               <redirect>"regexp:https://apphost\d\d\d\.example\.com:443/oidcclient/redirect/client01"</redirect>
          </client>   </localStore>
    </oauthProvider>

結果

您已完成所需的最低配置,可以將 Liberty 伺服器配置成「OpenID Connect 提供者」,能夠與配置成「OpenID Connect 用戶端」的其他 Liberty 伺服器通訊。

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

檔名:twlp_config_oidc_op.html