wso2~对接外部认证系统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 (身份提供者) 功能允许您将外部身份管理系统(如 Keycloak、Azure AD、Okta 等)集成到 WSO2 平台中,实现联合身份认证(Federation)。以下是使用 WSO2 Identity Providers 功能并与 Keycloak 对接的完整步骤:
1. Identity Providers 功能概述**
- 作用:
- 允许用户通过外部身份提供者(如 Keycloak)登录 WSO2 管理的应用或 API。
- 支持协议:SAML 2.0、OAuth 2.0/OpenID Connect (OIDC)、WS-Federation 等。
- 典型场景:
- 企业已有 Keycloak 用户体系,需与 WSO2 平台集成。
- 需要将 WSO2 作为身份代理(Proxy),集中管理多个外部身份源。
2. 配置 Keycloak 作为外部 Identity Provider**
步骤 1:在 Keycloak 中创建客户端(Client)
-
登录 Keycloak 管理控制台
访问https://keycloak-host:port/auth/admin
。 -
创建 Realm(如果尚未创建)
进入默认的master
Realm 或新建一个(如my-realm
)。 -
创建客户端(Client)
- 导航到 Clients → Create。
- 设置:
- Client ID:
wso2-client
(自定义名称)。 - Client Protocol:
openid-connect
。
- Client ID:
- 保存后,进入客户端配置:
- Valid Redirect URIs:添加 WSO2 的回调地址,如
https://wso2-host:9443/commonauth
。 - Web Origins:
*
(或限制为 WSO2 域名)。 - 启用 Client authentication(生成客户端密钥)。
- Valid Redirect URIs:添加 WSO2 的回调地址,如
-
记录关键信息
- 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
,使用管理员账号登录。 -
创建新的 Identity Provider
- 导航到 Main → Identity → Identity Providers → Add。
- 输入名称(如
Keycloak-IDP
)。
-
配置 OpenID Connect 连接
- 在 Federated Authenticators → OpenID Connect Configuration 中:
- Enable:勾选。
- Client ID:
wso2-client
(Keycloak 中创建的客户端 ID)。 - Client Secret:Keycloak 客户端的密钥。
- Authorization Endpoint:Keycloak 的 OIDC 授权端点(如
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 的创建。
3. 配置服务提供者(Service Provider)使用 Keycloak 认证**
场景 1:WSO2 作为服务提供者(SP)
-
创建服务提供者(Service Provider)
- 导航到 Main → Identity → Service Providers → Add。
- 输入名称(如
My-App
)。
-
配置联合认证
- 在 Local & Outbound Authentication Configuration 中:
- 选择 Federated Authentication。
- 勾选刚创建的
Keycloak-IDP
。
- 可选:设置认证步骤(多因素认证)。
- 在 Local & Outbound Authentication Configuration 中:
-
配置声明映射
确保服务提供者使用的声明与 Identity Provider 的映射一致。
场景 2:通过 WSO2 访问 API(API Manager 集成)
-
在 API Manager 中启用 Keycloak 认证
- 登录 API Publisher(
https://wso2-host:9443/publisher
)。 - 创建或编辑 API → Runtime Configurations → Security。
- 勾选 OAuth2 或 OpenID Connect,并关联
Keycloak-IDP
。
- 登录 API Publisher(
-
订阅 API 并测试
- 用户通过 Keycloak 登录开发者门户,获取令牌后调用 API。
4. 自定义claim的映射**
将第三方idp的用户字段映射到wso2-apim中,可以按着下面步骤实现
配置deployment.toml,开启自定义claim
如果不开启,它会映射默认的几个字段,如
uid
,nickName
,displayName
,roles
等
[authentication.endpoint]
enable_custom_claim_mappings = true
kc中定义固定的wso2角色到token中
固定的客户端角色
自定义的token中的元素
wso2中注册用户后具有这个角色
用户每次登录时都会进行用户信息的同步
** IDP到wso2时的对应关系的优先级
找到对应的sp,通过在sp的
Claim Configuration
,需要注意其它对应的sp也需要有相同的Claim Configuration
,否则用户登录这块会出现无法映射的问题。
- sp中定义的claim优先于idp
- 建议在idp中直接统一定于,避免每个sp中定义的不同,导致系统无法登录的问题
5. 数据的映射
数据何时从第三方IDP同步到wso2
用户通过第三方登录时,当数据有变更,数据会自动同步到wso2系统,它在wso2am_shared_db库中um_user_attribute表存储,如图