WEB安全(十七)跨域单点登录的实现

单点登录的核心思路是客户端存储AuthToken,服务端存储登录信息。由于客户端将AuthToken存储在Cookie中,所以要解决Cookie的跨域读写问题。

回顾Cookie的路径(path)和域(domain)

cookie路径

cookie 一般都是由于用户访问页面而被创建的,可是并不是只有在创建 cookie 的页面才可以访问这个cookie。在默认情况下,出于安全方面的考虑,只有与创建 cookie 的页面处于同一个目录或在创建cookie页面的子目录下的网页才可以访问。那么此时如果希望其父级或者整个网页都能够使用cookie,就需要进行路径的设置。

cookie域

domain表示的是cookie所在的域,默认为请求的地址,如网址为www.jb51.net/test/test.aspx,那么domain默认为www.jb51.net。而跨域访问,如域A为t1.test.com,域B为t2.test.com,那么在域A生产一个令域A和域B都能访问的cookie就要将该cookie的domain设置为.test.com;如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该cookie的domain设置为t2.test.com。

解决跨域的核心思路

1、跨域登录,通过将AuthToken传递给非主域名的站点,将AuthToken保存在当前域下的Cookie中。

2、跨域登出,调用非主域名站点的登出页面,完成设置Cookie中的AuthToken过期的操作。

注:图片来源:https://ken.io/note/sso-design-implement

跨域登录(主域名已登录)

访问业务站点时,跳转到SSO站点做登录状态校验,验证通过后,返回302重定向到非主域名的站点,将AuthToken保存在当前域下的Cookie中,最后跳转回业务站点。

在这里插入图片描述

跨域登录(主域名未登录)

主体思路一样,只是第一步是跳转到SSO做登录操作。

在这里插入图片描述

跨域登出

请求登出时,也需要跳转到SSO站点,验证通过后,SSO站点清除存储的登录信息,并且返回302重定向到非主域名,设置客户端的AuthToken过期,最后跳转回业务站点。

在这里插入图片描述


版权声明:本文为JinYJ2014原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。