实现sso 的两种方案

方案一(没有测试过,好处是子站点需要展示用户信息时,只需要判断是否有cookie存在就好了。)

单站点登录后获取可以单点登录的站点列表,给列表中的站点发jsonp跨域请求,通知各个站点设置cookie。各个站点需要每次判断无session的时候验证一下是否有cookie,有的话就解析并组装session, 即同步cookie实现单点登录。

如果A域名和B域名(指主域名不同的情况)要共享登陆,B域名下的cookie还是要B自己写的,jsonp的处理就是告诉B,该写个什么值,当然传递过程中最好进行加密,当AB等等各产品都设置了统一的凭据,那么就完成了“单点登陆”的要求。不过,对这个凭据进行解析的需求也是很重要的,因为涉及到凭据cookie里信息的具体内容,这个验证过程也只有京东的开发人员才知道了。

http://blog.chinaunix.net/uid-25508399-id-3431705.html


方案二(这种方案需要显示用户登录信息的页面都需要求请求sso服务器。页面302会导致对搜索引擎不友好。比如用户访问首页,首页上方需要展示登录|注册按钮或者xxx您好,这个时候就需要先判断用户是否已经有session存在,没有的话需要那么接着判断是否已经在sso登录。这个时候就需要先转向sso做判断,然后再由转回首页。)

6.1  用户未登录时访问子站一,子站一服务器检测到用户没登录(没有本站session,因为没传过来session对应cookie),于是通知浏览器跳转到SSO服务站点,并在跳转的URL参数中带上当前页面地址,以便登录后自动跳转回本页。

6.2  SSO服务站点检测到用户没有登录,于是显示登录界面。

用户提交登录请求到服务端,服务端验证通过,创建和账号对应的用户登录凭据(token)。

然后,服务端通知浏览器把该token作为SSO服务站点的cookie存储起来,并跳转回子站一,跳回子站一的URL参数中会带上这个token。

6.3  浏览器在写SSO服务站点cookie后,跳转回子站一。

子站一服务端检测到浏览器请求的URL中带了单点登录的token,于是把这个token发到SSO服务站点验证。

SSO服务端站点拿token解密出用户账号,把账号信息中允许子站一访问的部分返回给子站一。

子站一根据返回的信息生成用户在本站的会话,把会话对应cookie写入浏览器,从而完成在本站的登入以及会话保持。之后用户访问再子站一时,都会带上这个cookie,从而保持在本站的登录状态。

6.4  用户再访问子站二。子站二服务器检测到用户没登录,于是通知浏览器跳转到SSO服务站点。

6.5  浏览器访问SSO服务站点时会带上上述6.2环节创建的token这个cookie。SSO服务站点根据该token能找到对应用户,于是通知浏览器跳转回子站二,并在跳转回去的URL参数中带上这个token。

6.6  子站二服务端检测到浏览器请求的URL中带上了单点登录的token,于是又会走上述6.3对应步骤,完成用户在本站的自动登录。

http://www.cnblogs.com/baibaomen/p/sso-sequence-chart.html

转载于:https://my.oschina.net/yangzg/blog/983681

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值