当前位置: 首页 > news >正文

以社区登录为例,对接社区如微信登录后,在keycloak登录页点微信按钮,

  1. 登录页面 /auth/realms/demo/protocol/openid-connect/auth
  2. 验证参数,完成到社区网站的302跳转 /auth/realms/{realm}/broker/weixin/login?client_id=democlient&tab_id=rzukcX7mOfQ&session_code=OPsAHAZ3HZISaxklQLmcVYJThVUwLh5Y8TkAi5GQPjY
  3. 在社区网站上完成登录,由社区302跳转回keycloak页面
  4. 如果社区帐号没有绑定keycloak用户,进入first-broker-login页面,完成用户的绑定 /auth/realms/demo/login-actions/first-broker-login?client_id=democlient&tab_id=JCCx2WFmFFA
  5. 在first-broker-login填写信息提交后,完成绑定,302到post-broker-login页面 /auth/realms/demo/login-actions/post-broker-login?client_id=democlient&tab_id=dBh9Jl7qib4
  6. post-broker-login流程处理完成后,302到after-post-broker-login页面,/auth/realms/demo/broker/after-post-broker-login?session_code=QM5PnTZihZqnVsyCilwJhxLY5viLoCgckPLHF_NkBuA&client_id=democlient&tab_id=dBh9Jl7qib4
  7. 这样就完成了keycloak的登录,然后302跳转到redirect_uri页面,登录结束

跨域iframe登录出现问题的点

  1. 打开登录页后,生成auth_session_id这个键,并添加了当前域名的顶级域名做为cookie的Partition Key
  2. 点击社区登录后,kc服务端进入如下方法
  • org.keycloak.services.resources.IdentityBrokerService.performLogin()
    • org.keycloak.services.resources.IdentityBrokerService.parseSessionCode()
      • org.keycloak.services.resources.SessionCodeChecks.initialVerify()
  1. 经过sessionCode初始检查之后,在执行到parseSessionCode()方法中代码AuthenticationSessionModel authSession = checks.getAuthenticationSession();时,authSession的结果为空,故出现无法登录异常,如下代码
ERROR [org.keycloak.services.resources.IdentityBrokerService] (default task-1708) unexpectedErrorHandlingRequestMessage: javax.ws.rs.WebApplicationException: HTTP 400 Bad Request at org.keycloak.keycloak-services@14.0.0//org.keycloak.services.resources.IdentityBrokerService.parseSessionCode(IdentityBrokerService.java:1225) at org.keycloak.keycloak-services@14.0.0//org.keycloak.services.resources.IdentityBrokerService.performLogin(IdentityBrokerService.java:419)

跨域后的异常

  1. 有同域的auth_session_id的情况下(已在cookie partitioned为空的网站登录,与kc认证服务同一顶级域名),在跨域页面登录,请求是http 302跳到新登录页,显示登录超时(或者强制跳到已登录页面),原因是kc服务端获取的auth_session_id与当前页面传递的tab_id和session_code不匹配

  2. 在没有其它auth_session_id的情况下,在跨域页面登录,显示错误页,http 400错误,原因是kc服务端在无法获取cookie中带分区的auth_session_id

  3. keycloak使用了会话保持功能,我们使用更稳定的ingress在浏览器添加cookie的方式,当在社区超链登录时,它的a标签里target属性为_parent或者_top,这样链接发送的cookie是cookie partitioned为空的网站route(状态保持自动生成),这时会出现请求的kc节点与提交的kc节点不同的情况,也会出现400的错误

http://www.jsqmd.com/news/1099643/

相关文章:

  • 新手用AI写长篇小说全流程教学,深度使用指南(附提示词)
  • ESP32 + 传感器:手把手教你做土壤监测终端
  • Windows本地实时语音转文字:TMSpeech让你的电脑变身智能会议助手
  • 大模型技术之深度学习
  • Java 26 发布了, 我人麻了。。
  • AI Agent 新概念: Loop Engineering 是什么? 一篇文章讲清楚定义、组成、应用场景
  • Redis缓存实战:彻底解决缓存穿透、击穿、雪崩三大难题
  • 软件工程从业所需的技能:正确认识行业,并走出可持续的职业生涯
  • 整群随机抽样
  • 可视化学科发展脉络浅梳(学习笔记)
  • 京东开源实时视频视觉语言交互模型:全栈方案解析与落地实践
  • sdfsfds
  • 2026 年本地部署的 AI 数字人直播系统到底有多省钱?
  • 开源模型技术总结-3————FireRed(小红书)开源模型
  • 北京心商科技发布GEO优化产品 助力企业合规营销
  • 从Prompt到Loop,拆解Agent 进化的底层逻辑
  • Agent推理快到API成瓶颈:Responses API WebSocket如何提速40%
  • 51单片机数码管电压表
  • 大模型评测与AI产品质量保障:第3篇 用 Python 调用 模型API
  • OpenAI SDK 环境搭建教程
  • Xshell+Xftp使用教程
  • 主流三维光学轮廓仪国产品牌与技术解析
  • 操作简便吗?8款AI写作辅助网站综合榜,毕业答辩稳了!
  • TactiX实测:星际2战术训练神器,支持离线REP解析与MOD扩展
  • 2026 在上海如何找一家专业又靠谱的小程序定制开发公司
  • 告别命令行!用JGit在Java项目里优雅地操作Git(附完整API使用示例)
  • SpringBoot(springboot的类加载和传统的双亲委派有什么区别、如何按顺序实例化Bean)
  • 】[SampleVirtualTexture节点]原理解析与实际应用
  • 只看光明的一面:当机器学习失去“反面教材“时 | Positive-Only Learning深度解读
  • MySQL8-Windows安装教程