在 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)

  1. 登录 Keycloak 管理控制台

    访问 https://keycloak-host:port/auth/admin

  2. 创建 Realm(如果尚未创建)

    进入默认的 master Realm 或新建一个(如 my-realm)。

  3. 创建客户端(Client)

    • 导航到 ClientsCreate
    • 设置:
      • Client IDwso2-client(自定义名称)。
      • Client Protocolopenid-connect
    • 保存后,进入客户端配置:
      • Valid Redirect URIs:添加 WSO2 的回调地址,如 https://wso2-host:9443/commonauth
      • Web Origins*(或限制为 WSO2 域名)。
      • 启用 Client authentication(生成客户端密钥)。
  4. 记录关键信息

    • Client IDwso2-client
    • Client Secret:在 Credentials 标签页中获取。
    • Keycloak Realm 的 OpenID Endpoint

      https://keycloak-host:port/auth/realms/my-realm/.well-known/openid-configuration

步骤 2:在 WSO2 中配置 Keycloak 为外部 Identity Provider

  1. 登录 WSO2 管理控制台

    访问 https://wso2-host:9443/carbon,使用管理员账号登录。

  2. 创建新的 Identity Provider

    • 导航到 MainIdentityIdentity ProvidersAdd
    • 输入名称(如 Keycloak-IDP)。
  3. 配置 OpenID Connect 连接

    • Federated AuthenticatorsOpenID Connect Configuration 中:

      • Enable:勾选。
      • Client IDwso2-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 URLhttps://wso2-host:9443/commonauth(与 Keycloak 客户端配置一致)。
  4. 配置声明映射(Claim Mapping)

    • Claim Configuration 中,将 Keycloak 返回的用户属性(如 emailgiven_name)映射到 WSO2 的本地声明。
    • 示例:
      • Remote ClaimemailLocal Claimhttp://wso2.org/claims/emailaddress
  5. 保存配置

    点击 Register 完成 Identity Provider 的创建。


3. 配置服务提供者(Service Provider)使用 Keycloak 认证

场景 1:WSO2 作为服务提供者(SP)

  1. 创建服务提供者(Service Provider)

    • 导航到 MainIdentityService ProvidersAdd
    • 输入名称(如 My-App)。
  2. 配置联合认证

    • Local & Outbound Authentication Configuration 中:

      • 选择 Federated Authentication
      • 勾选刚创建的 Keycloak-IDP
    • 可选:设置认证步骤(多因素认证)。
  3. 配置声明映射

    确保服务提供者使用的声明与 Identity Provider 的映射一致。


场景 2:通过 WSO2 访问 API(API Manager 集成)

  1. 在 API Manager 中启用 Keycloak 认证

    • 登录 API Publisher(https://wso2-host:9443/publisher)。
    • 创建或编辑 API → Runtime ConfigurationsSecurity
    • 勾选 OAuth2OpenID Connect,并关联 Keycloak-IDP
  2. 订阅 API 并测试

    • 用户通过 Keycloak 登录开发者门户,获取令牌后调用 API。

4. 验证集成

测试登录流程

  1. 访问 WSO2 服务提供者的应用(如 https://wso2-host:9443/my-app)。
  2. 点击 Login with Keycloak(或类似按钮)。
  3. 重定向到 Keycloak 登录页面,输入 Keycloak 用户凭据。
  4. 登录成功后,返回 WSO2 应用并验证用户信息。

5. 常见问题与调试

问题 1:证书验证失败

  • 现象SSLHandshakeExceptionunable to find valid certification path
  • 解决方案
    • 将 Keycloak 的 SSL 证书导入 WSO2 的信任库:
      keytool -importcert -keystore <WSO2_HOME>/repository/resources/security/client-truststore.jks -alias keycloak -file keycloak.crt

问题 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:

  1. 在 Keycloak 中创建 SAML 客户端

    • 客户端协议选择 SAML
  2. 在 WSO2 中配置 SAML 身份提供者
    • 提供 Keycloak 的 SAML 元数据(Entity ID、SSO URL、证书等)。

总结

通过 WSO2 的 Identity Providers 功能,您可以无缝集成 Keycloak 作为外部身份源,实现以下能力:

  • 联合登录:用户通过 Keycloak 登录 WSO2 管理的应用或 API。
  • 集中管理:统一审计日志和策略控制。
  • 协议支持:灵活选择 OIDC、SAML 等标准协议。

关键配置点:

  1. Keycloak 客户端的正确配置(重定向 URI、协议)。
  2. WSO2 Identity Provider 的端点与声明映射。
  3. 服务提供者或 API 的联合认证设置。

wso2~对接外部认证系统keycloak的更多相关文章

  1. 云方案,依托H3C彩虹云存储架构,结合UIA统一认证系统,实现了用户数据的集中存储和管理

    客户的声音 资料云项目在迷你云基础上二次开发,通过使用云存储技术及文件秒传技术,对文件进行统一存储与管理,以达到节约文件管理成本.存储成本目的:通过有效的文件版本控制机制,以达到风险管控的目的:通过多 ...

  2. 介绍 ASP.NET Identity - ASP.NET 应用程序的成员身份认证系统

    ASP.NET Identity 是构建 ASP.NET web 应用程序的一种新的身份认证系统.ASP.NET Identity 可以让您的应用程序拥有登录功能,并可以轻松地自定义登录用户的相关数据 ...

  3. Django自定义用户认证系统之自定义用户模型

    参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...

  4. 将Python的Django框架与认证系统整合的方法

    将Python的Django框架与认证系统整合的方法 这篇文章主要介绍了将Python的Django框架与认证系统整合的方法,包括指定认证后台和编写认证后台等内容,需要的朋友可以参考下 将Django ...

  5. 统一用户认证系统CUAS实现要点

    背景: 基于目前存在多套员工使用的日常工作子系统,现状为各系统各自有一套用户体系,员工需要记住各系统的用户名.密码等信息,还需要登录多个系统,重复工作量颇多.统一用户认证组件将用户名.密码等信息统一存 ...

  6. 基于DDD + SD.Framework实现的统一身份认证系统

    项目地址 http://git.oschina.net/lishilei0523/ShSoft.UAC 项目说明 本项目开发的目的有三: 1.作为一个使用SD.Framework框架开发的项目样板 2 ...

  7. #研发解决方案介绍#IdCenter(内部统一认证系统)

    郑昀 基于朱传志的设计文档 最后更新于2014/11/13 关键词:LDAP.认证.权限分配.IdCenter. 本文档适用人员:研发   曾经一个IT内部系统配一套帐号体系和授权   线上生产环境里 ...

  8. Radius 远程用户拨号认证系统

    RADIUS 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . RADIUS:Remote Authentication Dial In User Service,远程用户拨号认证系 ...

  9. D django 用户认证系统

    django认证系统包含三个部分:用户.权限和分组 安装 django项目默认启用了认证系统,如果不是使用django-admin.py创建项目的可以通过在settings配置文件里面的INSTALL ...

  10. [系统开发] Squid 认证系统

    一.用途 用过 Squid 的用户认证模块的同事一定知道,它有个很麻烦的问题:每过一段时间就会跳出一个重新输入密码的窗口,用户不胜其烦,我查了网上的各种配置资料,始终没有找到一个圆满的解决方法,所以编 ...

随机推荐

  1. QT5笔记: 16. 时间和定时器的常用功能

    例子 #ifndef WIDGET_H #define WIDGET_H #include <QTime> #include <QTimer> #include <QWi ...

  2. docker - [12] 镜像发布到DockerHub、阿里云

    题记部分 一.镜像发布到 DockerHub 1.地址:https://hub.docker.com/ 注册自己的账号 2.确定这个账号可以登录 3.在服务器上提交镜像 4.登录之后提交镜像即可. [ ...

  3. 玩转摄像头之MT9V034(最新打样,展示下,欢迎观摩,哈哈)低照度 红外透视应用

    分辨率:752*480  低照度 效果超好先上图 图像处理.物联网.fpga.stm32研究 我的店铺:ccjt.taobao.com 

  4. 6. Calcite添加自定义函数

    1. 简介 在上篇博文中介绍了如何使用calcite进行sql验证, 但是真正在实际生产环境中我们可能需要使用到 用户自定义函数(UDF): 通过代码实现对应的函数逻辑并注册给calcite sql验 ...

  5. 当懒惰遇上AI:我如何用Coze让大模型帮我整理2.5万字课程笔记

    能写代码绝不动手,能用AI绝不写代码 -- AI粉嫩特攻队信条 通过本文学会打造这个AI工具,只有一个要求:识字且会上网! 一个小困扰 有朋友最近在上一位大佬的线上直播课程,感叹道: "老师 ...

  6. windows使用Makefile时自动给可执行文件加上.exe后缀

    APP := main 在使用makefile的时候,一般通过变量设置自己想要编译出来的可执行文件的名字 在windows平台编译出来的可执行文件是需要.exe后缀的 识别当前操作系统 通过识别当前的 ...

  7. 【BUG】鸿蒙模拟器虚拟化问题的解决方案

    创建记事本文档.txt,键入以下代码: pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum > ...

  8. 本地如何访问vue2 生成的dist代码

    前言 当你使用 Vue CLI 或其他构建工具构建 Vue 2 项目时,它会生成一个 dist 文件夹,这个文件夹包含了你项目的生产环境版本的静态资源文件(HTML.JavaScript 和 CSS) ...

  9. go map fatal error: concurrent map iteration and map write 读写锁与深度拷贝的坑

    起因 从币安实时拉取交易对的数据,这里使用了 map,用于存放每个交易对的最新价格,由于 map 并不是并发安全的所以加了读写锁. 但系统有时候还是会发生 fatal error: concurren ...

  10. 运维 —— IMP-00030: failed to create file import_sys for write

    IMP-00030: failed to create file import_sys for writeIMP-00000: Import terminated unsuccessfully原因:操 ...