在 Liberty 中配置「OpenID Connect 提供者」
您可以將 Liberty 伺服器配置成當作「OpenID Connect 提供者」或授權伺服器,以充分利用 Web 單一登入。
關於這項作業
您可以在 Liberty 中啟用 openidConnectServer-1.0 特性,外加其他的配置資訊,將 Liberty 伺服器配置成作為「OpenID Connect 提供者」。
程序
- 在 server.xml 檔中新增 openidConnectServer-1.0
Liberty 特性和其他任何必要特性。openidConnectServer-1.0 特性也需要 ssl-1.0 特性。
<feature>openidConnectServer-1.0</feature> <feature>ssl-1.0</feature>
- 定義 OAuth 服務提供者。OpenID Connect 建置在 OAuth 2.0 通訊協定之上,因此您必須配置有效的 OAuth 服務提供者。OAuth 服務提供者的配置包括適當的
oauth-roles、oauthProvider 和使用者登錄元素。只要使用者獲授權使用 OpenID Connect,也必須對映至 authenticated oauth-role。如需相關資訊,請參閱定義 OAuth 服務提供者。
會更新 OpenID Connect 的 OAuth meta 資料,並在用戶端 meta 資料中新增主要項目。如果您的用戶端登錄使用 databaseStore 模式,請參閱將「OpenID Connect 提供者」配置成接受用戶端登錄要求。建議您遵循文件來管理用戶端。如果您的用戶端登錄使用 localStore 模式,您可以登錄 scope、preAuthorizedScope、grantTypes、responseTypes、introspectTokens 和 functionalUserId,以及其他屬性。
- 新增 openidConnectProvider 元素,並使其 oauthProviderRef 屬性參照所配置的
oauthProvider。每一個 oauthProvider 只能有一個 openidConnectProvider 參照它,不能有二或多個 openidConnectProvider 元素參照相同的 oauthProvider。用戶端元素的 name 屬性和
secret 屬性必須符合對應「OpenID Connect 用戶端」的
client ID 和 client 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 授權類型,有效的用戶端必須登錄其名稱、重新導向、範圍和密碼。 - 配置伺服器的信任儲存庫,以包含支援的「OpenID Connect 依賴方」(或用戶端)簽章者憑證。如需金鑰儲存庫的相關資訊,請參閱在 Liberty 中啟用 SSL 通訊
- 修改伺服器的 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 信任儲存庫。
除了如範例所示使用 SSL 預設配置,也可以在 sslDefault 元素上利用 outboundSSLRef 屬性來配置出埠預設 SSL 配置。如果指定了出埠預設屬性,進行出埠連線時,會使用 outboundSSLRef 屬性指定的 SSL 配置。您可以置換預設值,並使用 SSL 配置中的出埠 SSL 過濾器,來指定用於出埠連線的主機和埠。如需相關資訊,請參閱SSL 配置的出埠過濾器和配置出埠通訊的 SSL 設定。
註: 如果要使用 OpenID Connect,scope 屬性必須將 openid 包含在範圍清單中。如需其他的「OpenID Connect 提供者」配置選項,請參閱 OpenID Connect 提供者。
如需其他的 OAuth 配置選項,請參閱 Oauth。
選用:配置 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 說明文件。
選用:針對 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 端點所傳回的聲明。
- 實作 com.ibm.wsspi.security.openidconnect.IDTokenMediator SPI,以全面自訂 id_token
內容。SPI 提供最大的彈性,因此您可以建置自己的自訂記號。
選用:配置 Liberty OpenID Connect 提供者,以便將使用者鑑別委派給社群登入,讓使用者可以使用其社群媒體帳戶來登入。
當您為 Liberty OpenID Connect 提供者配置社群登入時,使用者可以使用其社群媒體帳戶來登入,而不必針對 Liberty 提供者另建帳戶。如需相關資訊,請參閱在 Liberty 中配置社群登入。
- 選擇性的:
將 Liberty OpenID Connect 提供者配置成在用戶端重新導向「統一資源定址器(URL)」中使用正規表示式。
- 如果要啟用正規表示式,請將 allowRegexpRedirects 用戶端屬性設為 true。
- 新增 regexp: 字串的字首,將 URL 評估為正規表示式。 會先檢查沒有正規表示式的 URL。
- 當您透過登錄端點來登錄用戶端時,會以您正規表示式中的反斜線 (\) 取代驚嘆號 (!)。
註: 容許重新導向至非預期的 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>
結果
次主題
- 使用 OpenID Connect 提供者作為 OAuth 2.0 授權伺服器
OpenID Connect 提供者可作為一般 OAuth 2.0 授權提供者,來簽發 OAuth 2.0 access_token,並支援所有的 OAuth 2.0 授權類型。 - 將「OpenID Connect 提供者」配置成接受探索要求
探索配置端點提供「OpenID Connect 提供者」伺服器所支援功能的相關資訊。 - 配置 UserInfo 端點所傳回的聲明
您可以配置 Liberty OpenID Connect 提供者,以自訂 UserInfo 端點傳回的要求。 - 將「OpenID Connect 提供者」配置成啟用二方 (2-legged) OAuth 要求
典型的 OAuth 流程由三「方 (leg)」組成,或由用戶端與授權伺服器之間的互動階段組成。 在二方 (2-legged) OAuth 實務中,用戶端使用預先授權的範圍,因此不需要與使用者互動,因而不需要執行典型流程中的其中一方。具體來說,使用者不需要接受授權伺服器的鑑別,或是同意共用所要求範圍指定的資訊。反倒是所有所要求的 scope 參數都會視為預先授權,且會自動新增到要求記號中,之後再將要求記號傳送給授權伺服器。 - 將「OpenID Connect 提供者」配置成使用 RSA-SHA256 演算法來簽署 ID 記號
您可以將「OpenID Connect 提供者」配置成使用 RS256 演算法來簽署 ID 記號。 - 將「OpenID Connect 提供者」配置成接受「JSON Web 記號 (JWT)」作為授權許可
您可以將擔任「OpenID Connect 提供者」的 Liberty 伺服器,配置成接受「JSON Web 記號」,以交換存取記號。 - 將「OpenID Connect 提供者」配置成接受用戶端登錄要求
用戶端登錄端點是管理者所管理的服務,用來登錄、更新、刪除和擷取打算使用「OpenID Connect 提供者」之「OpenID Connect 依賴方」的相關資訊。登錄程序可進而提供資訊供「依賴方」使用,包括 OAuth 2.0 用戶端 ID 和用戶端密碼(如果沒有指定的話)。 - OpenID Connect 自訂表單
您可以取代使用者鑑別的預設表單登入頁面,也可以開發您自己的使用者同意表來收集用戶端授權資料。 - 鑑別使用者
OpenID Connect 提供者支援使用傳統 Java™ Platform Enterprise Edition (J2EE) FormLogin 來鑑別使用者。

檔名:twlp_config_oidc_op.html