You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网站A与B实现单点登录(SSO)交互及iframe访问问题咨询

跨门户免登录跳转实现方案(A→B)

针对你提到的场景(A、B门户用户认证信息一致,登录A后点击按钮直接访问B),以下是几种可行的解决方案,能解决你之前iframe方案遇到的会话超时、页面显示问题:

方案1:基于JWT的单点登录(SSO)

这是最灵活的跨域方案,无需共享会话存储:

  • 门户A登录成功后,后端生成包含用户身份信息(如用户名、用户ID)的JWT,使用A和B共同约定的密钥签名,并设置合理的过期时间(比如10分钟)。
  • 点击A中的新增按钮时,前端先向A的后端请求获取该JWT。
  • 通过页面跳转(而非iframe)的方式,将JWT作为参数传递到B的SSO登录接口,示例:btwo.com/sso/login?token=xxx(建议用HTTPS传输,避免明文泄露)。
  • B的后端验证JWT的签名有效性和过期时间,验证通过后直接为用户创建B门户的本地会话,跳转至B的主页。

这种方式下,B的会话由自身管理,不会出现会话超时不一致的问题,且用户直接进入B的正常页面,不会看到登录/注销页。

方案2:共享会话存储(如Redis)

如果两个门户可以共用存储资源,这种方案更简单:

  • 配置A和B的后端使用同一个Redis实例存储会话数据,会话ID的生成规则、加密密钥保持一致。
  • 用户登录A后,A会在Redis中写入包含用户身份的会话记录。
  • 点击新增按钮时,前端跳转至B的会话同步接口,将A的会话ID通过以下方式传递:
    • 若A、B为同主域名(如aone.example.com和btwo.example.com),可通过共享Cookie传递会话ID(设置Cookie的domain为父域名);
    • 跨主域名则通过URL参数或隐藏表单POST传递。
  • B的后端根据会话ID从Redis中查询用户信息,验证有效后创建B的本地会话,跳转至主页。

方案3:后端代理登录请求

适合不想引入额外组件的场景:

  • 用户登录A后,点击新增按钮时,A的后端直接模拟用户登录请求到B的登录接口(使用用户的用户名和密码,因为两个系统认证信息一致)。
  • B验证通过后,返回B的会话Cookie,A的后端将这些Cookie设置到响应中(注意跨域Cookie的限制,若为同主域名可直接设置,跨域则需要B配合允许跨域Cookie)。
  • 前端跳转至B的主页,此时已携带有效的会话Cookie,直接进入登录状态。

注意事项

  • 所有方案都必须使用HTTPS传输,避免凭证泄露;
  • JWT方案中,不要在Payload中存放敏感信息(如密码),仅保留必要的身份标识;
  • 共享会话存储方案中,要确保Redis的访问权限安全,避免会话数据被篡改或窃取;
  • 若使用Cookie传递会话信息,需配置HttpOnly和Secure属性,提升安全性。

内容的提问来源于stack exchange,提问作者Aaska Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:52:44