惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
GRAHAM CLULEY
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI
P
Privacy & Cybersecurity Law Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
博客园 - Franky
Spread Privacy
Spread Privacy
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Project Zero
Project Zero
Engineering at Meta
Engineering at Meta
The Hacker News
The Hacker News
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
A
Arctic Wolf
Cisco Talos Blog
Cisco Talos Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Threat Research - Cisco Blogs
Recorded Future
Recorded Future
Latest news
Latest news
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
C
CERT Recently Published Vulnerability Notes
美团技术团队
C
CXSECURITY Database RSS Feed - CXSecurity.com
O
OpenAI News
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
B
Blog RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threatpost
T
The Blog of Author Tim Ferriss
L
LINUX DO - 最新话题
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
S
Securelist
Microsoft Azure Blog
Microsoft Azure Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Secure Thoughts
罗磊的独立博客
P
Proofpoint News Feed
T
The Exploit Database - CXSecurity.com
Apple Machine Learning Research
Apple Machine Learning Research
Cloudbric
Cloudbric
G
Google Developers Blog

博客园 - 张占岭

springboot~关于构造方法注入和字段注入的选择 apisix~OpenResty各阶段的介绍 keycloak~aud受众字段的作用及如何生成 wso2~关于workbuddy中mcp在wso2中的授权端点 k8s~避免调度资源碎片化 WEB安全~csrf介绍 WEB安全~DPoP的介绍 WEB安全~csp的介绍 什么是中间人攻击 WEB安全~xss的介绍 k8s~pod资源限制和JVM的XMX配置 keycloak~实现OAuth 2.0 Token Exchange backstage~实体的介绍及它们的关系 backstage~openapi的接入与protobuf的对比 backstage~将java服务添加到backstage backstage~对接github和gitlab backstage~开始一个backstage应用 apisix~graphQL的支持 wso2几个核心项目介绍 docker~BuildKit的介绍 k8s~secret资源的使用 算法~时间戳计算两个日期是否为同天同时同分 wso2~4.5升级到4.6需要更新的数据表 backstage~Backstage的概述 springboot~jpa优雅的软删除能力 springboot~ImportBeanDefinitionRegistrar在自定义RPC框架中的使用 keycloak~深入了解DefaultSegmentedDataContainer对象解决内存泄漏 keycloak~分布式部署中会话过期清理机制 wso2~通过三方IDP的token置换wso2的token jmeter进行接口压测 Keycloak~infinispan中MergedUpdate中lifespanMs和maxIdleTimeMs wso2~添加mcp服务的注意点
关于对wso2和keycloak的token交换的调研
张占岭 · 2026-04-28 · via 博客园 - 张占岭

流程梳理手稿

  • 用户以keycloak为中心,在wso2中添加了keycloak做为IDP,wso2开发者平台通过keycloak进行登录
  • 登录成功后,通过keycloak颁发的auth_code,置换keycloak平台的access_token
  • 通过wso2平台的urn:ietf:params:oauth:grant-type:jwt-bearer方式,从keycloak平台交换一个wso2平台的用户token
  • 在wso2平台,通过用户token进行应用的添加,在应用中,生成应用的consumer_key和consumer_secret密钥对,简称app密钥对
  • 通过app密钥对进行client_credentials认证,生成app级别的token,它可以是jwt或者是普通的token(会存储到数据库)
  • 用户在通过客户端工具(cherry studio,cursor)连接wso2平台的api和mcp服务时,使用这个app的token进行授权
  • 如果用户访问的api资源需要认证,那么,在打开链接后,会先跳到keycloak平台进行认证
  • 我们通过keycloak平台支持的token exchange功能,可以将wos2平台的token置换成keycloak平台的token,即统一认证平台的token
  • 我们在访问api资源之前,可以加一个网关,用来实现wso2 token到keycloak token的交换

WSO2与Keycloak集成认证流程时序图

[下面内容为AI生成]

sequenceDiagram participant User as 用户/客户端 participant Keycloak as Keycloak IDP participant DevPortal as WSO2开发者平台 participant WSO2Gateway as WSO2网关 participant APIService as API/MCP服务 %% 第一阶段:用户登录和初始认证 Note over User,DevPortal: 1. 用户登录流程 User->>Keycloak: 用户登录(用户名/密码) Keycloak-->>User: 返回auth_code User->>DevPortal: 携带auth_code访问开发者平台 DevPortal->>Keycloak: 2. 用auth_code换取access_token Keycloak-->>DevPortal: 返回Keycloak access_token DevPortal->>DevPortal: 3. 通过jwt-bearer换取WSO2用户token DevPortal-->>User: 登录成功,建立WSO2用户会话 %% 第二阶段:应用创建和令牌生成 Note over User,DevPortal: 4. 应用管理 User->>DevPortal: 创建应用 DevPortal->>DevPortal: 生成应用密钥对(consumer_key/secret) DevPortal-->>User: 返回应用密钥对 Note over User,DevPortal: 5. 应用令牌生成 User->>DevPortal: 使用client_credentials请求app token DevPortal->>DevPortal: 验证应用密钥对 DevPortal-->>User: 返回app级别token(JWT/普通token) %% 第三阶段:API访问和令牌交换 Note over User,APIService: 6. 客户端访问服务 User->>APIService: 使用app token访问API/MCP服务 APIService->>WSO2Gateway: 转发请求(携带WSO2 token) Note over WSO2Gateway,Keycloak: 7. 认证检查和跳转 APIService-->>User: 需要认证,重定向到Keycloak User->>Keycloak: 用户认证(如需要) Keycloak-->>User: 认证完成,重定向回服务 Note over WSO2Gateway,Keycloak: 8. Token交换流程 WSO2Gateway->>Keycloak: 9. 通过token exchange交换token Keycloak-->>WSO2Gateway: 返回Keycloak平台token Note over WSO2Gateway,APIService: 10. 最终API访问 WSO2Gateway->>APIService: 10. 携带Keycloak token访问API资源 APIService-->>WSO2Gateway: 返回API响应 WSO2Gateway-->>User: 返回最终结果

流程步骤说明

阶段一:用户登录和初始认证

  1. 用户登录:用户通过Keycloak进行认证,获取auth_code
  2. Token交换:WSO2开发者平台使用auth_code从Keycloak换取access_token
  3. 统一令牌:WSO2通过jwt-bearer授权方式,从Keycloak获取WSO2用户token

阶段二:应用创建和令牌生成

  1. 应用创建:用户在WSO2开发者平台创建应用,生成consumer_key/consumer_secret
  2. 应用令牌:通过client_credentials授权类型生成app级别token(可以是JWT或普通token)

阶段三:API访问和令牌交换

  1. 客户端访问:客户端工具使用app token连接WSO2 API/MCP服务
  2. 认证检查:访问需要认证的API时,系统检查并重定向到Keycloak
  3. Token交换:WSO2网关通过Keycloak的token exchange功能,将WSO2 token交换为Keycloak token
  4. API访问:使用统一的Keycloak token访问最终的API资源

关键技术点

  1. OAuth 2.0流程:混合使用了authorization_code和client_credentials授权类型
  2. Token Exchange:WSO2与Keycloak之间的令牌交换机制
  3. 统一认证:以Keycloak为中心的统一身份管理
  4. 应用级认证:通过client_credentials实现应用级别的API访问
  5. 用户级认证:通过用户令牌实现需要用户上下文的操作

这个时序图清晰地展示了整个复杂认证流程中各个组件之间的交互关系,特别是WSO2与Keycloak之间的令牌交换机制。