wso2~對接外部認證系統(tǒng)keycloak
- https://shammijayasinghe.medium.com/saml-sso-wso2-api-manager-and-keycloak-bd3eec6038b2
- https://chakray.com/how-use-keycloak-as-wso2-api-manager-identity-provider
- https://htamahc.medium.com/configuring-keycloak-as-an-identity-provider-in-wso2-identity-server-c5cc124b6d6c
- https://dzone.com/articles/sso-wso2-api-manager-amp-keycloak
- https://is.docs.wso2.com/en/5.11.0/learn/configuring-claims-for-an-identity-provider
- https://is.docs.wso2.com/en/5.11.0/learn/configuring-roles-for-an-identity-provider
- https://is.docs.wso2.com/en/5.11.0/learn/configuring-just-in-time-provisioning-for-an-identity-provider/
在 WSO2 Identity Server 或 WSO2 API Manager 中,Identity Providers (身份提供者) 功能允許您將外部身份管理系統(tǒng)(如 Keycloak、Azure AD、Okta 等)集成到 WSO2 平臺中,實現(xiàn)聯(lián)合身份認證(Federation)。以下是使用 WSO2 Identity Providers 功能并與 Keycloak 對接的完整步驟:
1. Identity Providers 功能概述**
- 作用:
- 允許用戶通過外部身份提供者(如 Keycloak)登錄 WSO2 管理的應(yīng)用或 API。
- 支持協(xié)議:SAML 2.0、OAuth 2.0/OpenID Connect (OIDC)、WS-Federation 等。
- 典型場景:
- 企業(yè)已有 Keycloak 用戶體系,需與 WSO2 平臺集成。
- 需要將 WSO2 作為身份代理(Proxy),集中管理多個外部身份源。
2. 配置 Keycloak 作為外部 Identity Provider**
步驟 1:在 Keycloak 中創(chuàng)建客戶端(Client)
-
登錄 Keycloak 管理控制臺
訪問https://keycloak-host:port/auth/admin。 -
創(chuàng)建 Realm(如果尚未創(chuàng)建)
進入默認的masterRealm 或新建一個(如my-realm)。 -
創(chuàng)建客戶端(Client)
- 導(dǎo)航到 Clients → Create。
- 設(shè)置:
- Client ID:
wso2-client(自定義名稱)。 - Client Protocol:
openid-connect。
- Client ID:
- 保存后,進入客戶端配置:
- Valid Redirect URIs:添加 WSO2 的回調(diào)地址,如
https://wso2-host:9443/commonauth。 - Web Origins:
*(或限制為 WSO2 域名)。 - 啟用 Client authentication(生成客戶端密鑰)。
- Valid Redirect URIs:添加 WSO2 的回調(diào)地址,如
-
記錄關(guān)鍵信息
- Client ID:
wso2-client - Client Secret:在 Credentials 標簽頁中獲取。
- Keycloak Realm 的 OpenID Endpoint:
https://keycloak-host:port/auth/realms/my-realm/.well-known/openid-configuration
- Client ID:
步驟 2:在 WSO2 中配置 Keycloak 為外部 Identity Provider
-
登錄 WSO2 管理控制臺
訪問https://wso2-host:9443/carbon,使用管理員賬號登錄。 -
創(chuàng)建新的 Identity Provider
- 導(dǎo)航到 Main → Identity → Identity Providers → Add。
- 輸入名稱(如
Keycloak-IDP)。
-
配置 OpenID Connect 連接
- 在 Federated Authenticators → OpenID Connect Configuration 中:
- Enable:勾選。
- Client ID:
wso2-client(Keycloak 中創(chuàng)建的客戶端 ID)。 - Client Secret:Keycloak 客戶端的密鑰。
- Authorization Endpoint:Keycloak 的 OIDC 授權(quán)端點(如
https://keycloak-host:port/auth/realms/my-realm/protocol/openid-connect/auth)。 - Token Endpoint:Keycloak 的令牌端點(如
https://keycloak-host:port/auth/realms/my-realm/protocol/openid-connect/token)。 - UserInfo Endpoint:用戶信息端點(如
https://keycloak-host:port/auth/realms/my-realm/protocol/openid-connect/userinfo)。 - JWKS Endpoint:JWKS 端點(如
https://keycloak-host:port/auth/realms/my-realm/protocol/openid-connect/certs)。 - Callback URL:
https://wso2-host:9443/commonauth(與 Keycloak 客戶端配置一致)。
- 在 Federated Authenticators → OpenID Connect Configuration 中:
-
配置聲明映射(Claim Mapping)
- 在 Claim Configuration 中,將 Keycloak 返回的用戶屬性(如
email、given_name)映射到 WSO2 的本地聲明。 - 示例:
- Remote Claim:
email→ Local Claim:http://wso2.org/claims/emailaddress
- Remote Claim:
- 在 Claim Configuration 中,將 Keycloak 返回的用戶屬性(如
-
保存配置
點擊 Register 完成 Identity Provider 的創(chuàng)建。

3. 配置服務(wù)提供者(Service Provider)使用 Keycloak 認證**
場景 1:WSO2 作為服務(wù)提供者(SP)
-
創(chuàng)建服務(wù)提供者(Service Provider)
- 導(dǎo)航到 Main → Identity → Service Providers → Add。
- 輸入名稱(如
My-App)。
-
配置聯(lián)合認證
- 在 Local & Outbound Authentication Configuration 中:
- 選擇 Federated Authentication。
- 勾選剛創(chuàng)建的
Keycloak-IDP。
- 可選:設(shè)置認證步驟(多因素認證)。
- 在 Local & Outbound Authentication Configuration 中:
-
配置聲明映射
確保服務(wù)提供者使用的聲明與 Identity Provider 的映射一致。
場景 2:通過 WSO2 訪問 API(API Manager 集成)
-
在 API Manager 中啟用 Keycloak 認證
- 登錄 API Publisher(
https://wso2-host:9443/publisher)。 - 創(chuàng)建或編輯 API → Runtime Configurations → Security。
- 勾選 OAuth2 或 OpenID Connect,并關(guān)聯(lián)
Keycloak-IDP。
- 登錄 API Publisher(
-
訂閱 API 并測試
- 用戶通過 Keycloak 登錄開發(fā)者門戶,獲取令牌后調(diào)用 API。
4. 自定義claim的映射**
將第三方idp的用戶字段映射到wso2-apim中,可以按著下面步驟實現(xiàn)
配置deployment.toml,開啟自定義claim
如果不開啟,它會映射默認的幾個字段,如
uid,nickName,displayName,roles等
[authentication.endpoint]
enable_custom_claim_mappings = true
kc中定義固定的wso2角色到token中
固定的客戶端角色

自定義的token中的元素

wso2中注冊用戶后具有這個角色

用戶每次登錄時都會進行用戶信息的同步

** IDP到wso2時的對應(yīng)關(guān)系的優(yōu)先級
找到對應(yīng)的sp,通過在sp的
Claim Configuration,需要注意其它對應(yīng)的sp也需要有相同的Claim Configuration,否則用戶登錄這塊會出現(xiàn)無法映射的問題。
- sp中定義的claim優(yōu)先于idp
- 建議在idp中直接統(tǒng)一定于,避免每個sp中定義的不同,導(dǎo)致系統(tǒng)無法登錄的問題

5. 數(shù)據(jù)的映射
數(shù)據(jù)何時從第三方IDP同步到wso2
用戶通過第三方登錄時,當數(shù)據(jù)有變更,數(shù)據(jù)會自動同步到wso2系統(tǒng),它在wso2am_shared_db庫中um_user_attribute表存儲,如圖

浙公網(wǎng)安備 33010602011771號