使用场景:

对于一些网站平台来说,当需要共用一套用户信息,并且提高用户的使用体验,不想在各自的站点中还要额外多登录一次,单点登录就派上用场了

效果就是只需在 A 站点登录过后(其实也是跳转到 登录授权中心),当使用 B 站点的时候,无需再次登录,即可识别用户身份

 

情况分析:

单点登录的实现有多种方式,有直接用 cookie 的,也有颁发 token 的形式

1.对于同根域名下,可使用共享 cookie 的方式,比如 a.x.com b.x.com login.x.com,这种时候,我们将 cookie 写到 x.com 下即可实现共享

2.对于不同的根域名,我这里选择使用颁发 token 的形式进行判断用户信息

 

具体流程:

以下是我个人的实践方式,通过 授权中心 带上 token 给业务站点进行身份校验

1.授权中心(login.x.com):

使用传统的 cookie 授权方式进行登陆状态的判断

主要两个功能,一个是登陆,一个是判断登陆状态,在授权中心的页面上,第一步是 判断登陆状态

如果未登录:当用户登陆成功后,将获取到的 用户 id登陆方标识 当前时间戳 进行加密生成 token,通过 url 带上 token 并跳转回登陆方站点

如果已登录:生成新的 token ,并跳转回业务站点

(所以也就是,当进入到授权中心的时候,url 是必须带有业务站点的网址的,用于带上 token 并跳转回业务站点,比如 login.x.com?url=a.x.com)

 

2.业务站点(a.x.com b.x.com …):

通过获取 url 的 token,并将 token 存到 localStorage,每次需要校验用户信息请求的时候,在请求 head 带上该 token

当然,为了加强站点的安全性,不同业务站点的加密秘钥不一样,并且长度足够,比如使用GUID,而且业务站点同时需要判断 token 的时效性,如果 token 失效了,重新跳转到授权中心,当授权中心的 cookie 还生效,将会自动返回新的 token 到业务站点,业务站点进行更新 token,否则需要在授权中心重新进行登陆

 

具体实现:

Github:稍后放上