一个存在跨域问题的 SSO 的简单实现方案
2022-01-14 17:33:13 6 举报
对于不跨域的系统,比如 www.a.com 和 www.b.com 他们都是二级域名,并且一级域名不相同,此时不能通过设置 cookie 的 domain 相同的方式实现跨域。 一种简单的实现方式:使用重定向、URL参数传递跨域信息 实现 SSO
作者其他创作
大纲/内容
第 4 步生成 token 作为重定向 URL 的请求参数,解决了跨域 cookie 无法传递的问题
7、返回校验结果及相关信息
以上的方案:利用重定向和 URL 参数可进行跨域传递信息的特性,基本实现了跨域情况下的单点登录。其他问题的思考:1. token 的时效性问题。应保证每个 token 都是一次性的,避免重放攻击2. cookie 的时效性问题。cookie 的有效时间:业务网站 < sso 网站。且需要考虑重置 cookie 有效期。3. 考虑使用 jwt 作为 token 的实现方案4. 考虑 Session 共享问题
5、被重定向到 www.a.com?token=token(这个重定向动作是由 sso 发起的,sso 会重写 url 携带上生成的 token)
4、用户登录成功后,sso会生成一个 token,作为用户访问 www.a.com 的令牌;sso 还会生成一个 cookie(domain=www.sso.com),作为用户登录的凭证,即下次访问 www.sso.com 会自动携带 cookie,sso 就知道用户已经登录了
未登录时访问 www.a.com
www.sso.com
8、如果 token 有效那么会生成一个 cookie(domain=www.a.com) 作为用户身份凭证;下次用户请求 www.a.com 的资源时会携带此 cookie 而不需要经过 sso 拿 token
3、被重定向到 www.sso.com/login?originUrl=www.a.com,来到登录页面
www.a.com
www.b.com
2、资源访问受限,请求被拦截后未检测到身份信息,请求被重定向到 sso 系统
12、此时 sso 会校验 cookie 中的凭证,如果失效那么要求重新登录;如果没失效那么会生成一个 token,作为用户访问 www.b.com 的令牌
1、请求资源 www.a.com/index,不携带任何身份信息
13、被重定向到 www.b.com?token=token。同步骤 5-8
经过 1-8 步骤后,在已经登录的状态下访问 www.b.com
9、请求资源 www.b.com/index,不携带任何身份信息
10、资源访问受限,请求被拦截后未检测到身份信息,请求被重定向到 sso 系统
6、拿到 token,访问 www.sso.com/validate?token=#{token},验证 token 的合法性
11、被重定向到 www.sso.com/login?originUrl=www.b.com,同时携带 domain=www.sso.com 的 cookie(登录凭证)
0 条评论
下一页