网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Java >

keycloak~关于跨域的iframe对接keycloak的分析

时间:2025-11-04 08:38

人气:

作者:admin

标签:

导读:几个cookie下面元素 AUTH_SESSION_ID 会话级的session_state AUTH_SESSION_ID_LEGACY 在http中可见的AUTH_SESSION_ID KEYCLOAK_SESSION 带有效期的session_state KEYCLOAK_SESSION_LE...
  • AUTH_SESSION_ID 会话级的session_state
  • AUTH_SESSION_ID_LEGACY 在http中可见的AUTH_SESSION_ID
  • KEYCLOAK_SESSION 带有效期的session_state
  • KEYCLOAK_SESSION_LEGACY 在http中可见的KEYCLOAK_SESSION
  • KEYCLOAK_IDENTITY 用户完成认证后,在cookie记录用户和session_state的jwt token
  • KEYCLOAK_IDENTITY_LEGACY 在http中可见的KEYCLOAK_IDENTITY

图片

以社区登录为例,对接社区如微信登录后,在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页面,登录结束
  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的错误

  1. 表单提交登录,可以适应跨顶域的情况
  2. 社区a标签超链登录,如果target=_self,也可以适应跨顶域的情况,其它target属性,不适合
  3. 建议统一登录不使用iframe进行嵌入

作者:仓储大叔,张占岭,
荣誉:微软MVP
QQ:853066980

支付宝扫一扫,为大叔打赏!

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信