wso2~对接外部认证系统keycloak
在 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(如果尚未创建)
进入默认的masterRealm 或新建一个(如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. 验证集成
测试登录流程
- 访问 WSO2 服务提供者的应用(如
https://wso2-host:9443/my-app)。 - 点击 Login with Keycloak(或类似按钮)。
- 重定向到 Keycloak 登录页面,输入 Keycloak 用户凭据。
- 登录成功后,返回 WSO2 应用并验证用户信息。
5. 常见问题与调试
问题 1:证书验证失败
- 现象:
SSLHandshakeException或unable to find valid certification path。 - 解决方案:
- 将 Keycloak 的 SSL 证书导入 WSO2 的信任库:
keytool -importcert -keystore <WSO2_HOME>/repository/resources/security/client-truststore.jks -alias keycloak -file keycloak.crt
- 将 Keycloak 的 SSL 证书导入 WSO2 的信任库:
问题 2:声明未正确映射
- 现象:用户属性(如邮箱、角色)未传递到 WSO2。
- 解决方案:
- 检查 WSO2 Identity Provider 的 Claim Configuration,确保远程声明与 Keycloak 返回的 JSON 键匹配。
- 在 Keycloak 客户端的 Mappers 中配置声明映射规则。
问题 3:重定向 URI 不匹配
- 现象:
Invalid redirect_uri错误。 - 解决方案:
- 确保 WSO2 的 Callback URL 和 Keycloak 客户端的 Valid Redirect URIs 完全一致(包括协议、端口和路径)。
6. 高级配置(SAML 2.0 集成)
若需使用 SAML 代替 OIDC:
- 在 Keycloak 中创建 SAML 客户端:
- 客户端协议选择
SAML。
- 客户端协议选择
- 在 WSO2 中配置 SAML 身份提供者:
- 提供 Keycloak 的 SAML 元数据(Entity ID、SSO URL、证书等)。
总结
通过 WSO2 的 Identity Providers 功能,您可以无缝集成 Keycloak 作为外部身份源,实现以下能力:
- 联合登录:用户通过 Keycloak 登录 WSO2 管理的应用或 API。
- 集中管理:统一审计日志和策略控制。
- 协议支持:灵活选择 OIDC、SAML 等标准协议。
关键配置点:
- Keycloak 客户端的正确配置(重定向 URI、协议)。
- WSO2 Identity Provider 的端点与声明映射。
- 服务提供者或 API 的联合认证设置。
wso2~对接外部认证系统keycloak的更多相关文章
- 云方案,依托H3C彩虹云存储架构,结合UIA统一认证系统,实现了用户数据的集中存储和管理
客户的声音 资料云项目在迷你云基础上二次开发,通过使用云存储技术及文件秒传技术,对文件进行统一存储与管理,以达到节约文件管理成本.存储成本目的:通过有效的文件版本控制机制,以达到风险管控的目的:通过多 ...
- 介绍 ASP.NET Identity - ASP.NET 应用程序的成员身份认证系统
ASP.NET Identity 是构建 ASP.NET web 应用程序的一种新的身份认证系统.ASP.NET Identity 可以让您的应用程序拥有登录功能,并可以轻松地自定义登录用户的相关数据 ...
- Django自定义用户认证系统之自定义用户模型
参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...
- 将Python的Django框架与认证系统整合的方法
将Python的Django框架与认证系统整合的方法 这篇文章主要介绍了将Python的Django框架与认证系统整合的方法,包括指定认证后台和编写认证后台等内容,需要的朋友可以参考下 将Django ...
- 统一用户认证系统CUAS实现要点
背景: 基于目前存在多套员工使用的日常工作子系统,现状为各系统各自有一套用户体系,员工需要记住各系统的用户名.密码等信息,还需要登录多个系统,重复工作量颇多.统一用户认证组件将用户名.密码等信息统一存 ...
- 基于DDD + SD.Framework实现的统一身份认证系统
项目地址 http://git.oschina.net/lishilei0523/ShSoft.UAC 项目说明 本项目开发的目的有三: 1.作为一个使用SD.Framework框架开发的项目样板 2 ...
- #研发解决方案介绍#IdCenter(内部统一认证系统)
郑昀 基于朱传志的设计文档 最后更新于2014/11/13 关键词:LDAP.认证.权限分配.IdCenter. 本文档适用人员:研发 曾经一个IT内部系统配一套帐号体系和授权 线上生产环境里 ...
- Radius 远程用户拨号认证系统
RADIUS 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . RADIUS:Remote Authentication Dial In User Service,远程用户拨号认证系 ...
- D django 用户认证系统
django认证系统包含三个部分:用户.权限和分组 安装 django项目默认启用了认证系统,如果不是使用django-admin.py创建项目的可以通过在settings配置文件里面的INSTALL ...
- [系统开发] Squid 认证系统
一.用途 用过 Squid 的用户认证模块的同事一定知道,它有个很麻烦的问题:每过一段时间就会跳出一个重新输入密码的窗口,用户不胜其烦,我查了网上的各种配置资料,始终没有找到一个圆满的解决方法,所以编 ...
随机推荐
- 用Logseq记日报和管理文献
优缺点浅评 Logseq是一款双链笔记软件,其优点结合使用场景概括来说包括 开箱即用的极简界面,非常适合用来写日报 灵活的双链,强大的PDF标注,适合构建文献库 使用markdown格式来本地存储笔记 ...
- DW004 - ArgoDB介绍
ArgoDB:自主可控.国际领先.一站式满足湖仓集一体化建设的创新型分布式分析数据库 一.产品特点 统一的SQL编译引擎:支持标准SQL,兼容Teradata,Oracle,Db2等方言,应用开发门槛 ...
- 启动hive,报错 Name node is in safe mode.
在学习过程中,过了几天再启动虚拟机,启动hadoop后再启动别的框架会报错: Exception in thread "main" java.lang.RuntimeExcepti ...
- Cython与CUDA之Gather
技术背景 Cython是Python的一个超集,可以使用Pythonic的语法写出接近于C语言的性能,可以用于将Python编程过程中遇到的Bottleneck模块改写成Cython以达到加速的效果. ...
- 机器学习 | 强化学习(1) | 马尔科夫决策过程(MDP)概论
最近在搞强化学习(Reinforcement Learning),打算把之前写的笔记整理一下 本文基于大卫 希尔维(David Silver)教授的强化学习概论课程,视频中所采用的样例学生马尔科夫链( ...
- Redis压测脚本及持久化机制
Redis压测脚本及持久化机制 Redis性能压测脚本 Redis的所有数据是保存在内存当中的,得益于内存高效的读写性能,Redis的性能是非常强悍的.但是,内存的缺点是断电即丢失,所以,在实际项目中 ...
- AtCoder Beginner Contest 396-e
原题链接 思路 看到这道题,很明显就能发现这道题其实跟图论有关,将\(A\)数组看成一张无向图,每一个节点\(i\)的点权就是\(A_i\),每两个节点\(i\)和\(j\)之间的边权就是\(A_i ...
- TSP问题的不可近似性
\(\S\) 结论 TSP问题:n阶带权无向完全图中,找权值最小的哈密顿回路(无向图中遍历所有顶点的回路) 优化问题,记最优解为OPT 对于一般的n顶点TSP问题(非Metric),任意 多项式时间内 ...
- DevEco Studio 常用设置【自用】
设置为中文 API参考设置悬浮 始终定位打开的文件,单击预览免打开 保存时自动格式化和热更新 属性单独一行
- HIVE将长整数转字符串的错误
有一个超长字符串,比如:441066000000001005712973,原来存放在HIVE里表A 是用DECIMAL(24)类型.现在要与另外一个用string类型保存这个字段的表B关联,老是失败. ...