新浪微博如何实现 SSO 的分析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最近在使用sina微博时,经常性交替使用  和 进入我的微博。发现当我在 中登录之后,直接切换至,这时候在 是已经登录的,当我在 进行注销之后,再切换至 ,这时候在 也已经是注销的状态了。? 对于SSO的实现方案及其机制,早已经不是什么新鲜的技术了,从微软为.net提供的passport机制到java中开源的JBoss SSO、Oracle OpenSSO及经典的 Yale CAS等等之类的开源或一些商业SSO中间件都不失为作为单点登录实现的选择。当然一些企业也会选择自己实现一套适合自己轻量级方案,如采用SESSIONID转递或SESSION同步复制之类的。 可以看得出SSO的价值也是具大的,就拿sina来说吧,增加 域名之后,对于用户来说来说没有任何影响,即使你在 中进行登录,可以无缝在两域名之间随意切换,对于它推广无非是大大的益处。? 由于近年来一直在使用 Yale的CAS作为SSO的方案,觉得 SINA的SSO与Yale-CAS有很多异曲同工之妙,于是便对SINA的SSO进行分析,其中的细节处理还是很值的学习的。当然,由于分析看到的SINA SSO处理都只是一些表现或表面上的东西,再加上其大部分关键的sso js都已经被压缩,及SERVER端的实现机制也只是靠自己的经验及结合CAS的的一些原理进行猜测。其实本文应该叫 CAS SSO与SINA SSO的实现对比分析更比较贴切。??? 好吧,进入正题。?Sina SSO之分析篇 首先是进入 ,提交用户名及密码进行登录,通过 Firebug可以看到它通过类似Aajx POST到了 /sso/login.php?client=ssologin.js(v1.3.12),如下图所示:???? 不难看出,其 /sso/login.php 就是类似是 CAS 中的 Server,对sina的所有应用系统提供的统一登录入口。上面的参数中有一个service参数,了解 CAS的GG应该知道 cas 在登录的时候除了username 和 password同样也有一个 service 参数,其CAS该参数含义是子应用系统的服务名标识及登录成功之后所跳转的地址。当然,sina这里使用了 miniblog作为微博的服务名,估计他在sso-server端对 miniblog 与登录成功之后的地址进行映射,如 miniblog=/,这样就避免了CAS-client中转入service= decodeURIComponent()之类的做法了。? 这里的登录与CAS做法一致,将登录验证提交至统一的认证中心进行验证处理,从而避免了跨子域和全域的问题。 验证成功之后路转的路径就是service所向的地址,验证失败之后则返回至当前登录页。下面就SSO中的一些登录方面的核心问题做一些分析,看看SINA和CAS分别是如何处理的:?  1.如何授权某个子系统允许其在sso-server进行登录验证呢,类似cas-server中的login-ticket;? 对于cas来说,在首次进入 /cas/login页时,?会产生一个一次性的login-ticket,也就是说在提交登录验证前必须向服务器请求一个login-ticket,在登录提交时,需要将用户名及密码以及login-ticket进行提交至 cas-server端,cas-server端确定login-ticket有效后才会对用户名及密码进行认证。? 看看sina如何处理的吧,继续看firebug:??? 以上截图是当我首次进行 时,通过 ajax/jsonp的方式发起的一个请求,可以看到返回的callback函数中的 json 串中包含了 nonce:SXK19N的属性,参数名的汉译是“一次”或“一次性”的意思,估计这里的 nonce就是login-ticket,为再一次确实,我再试着提交登录看看,看它是否将该参数POST过去:???? 果然不出所料, nonce:SXK19N作为参数提交过去了,证明所猜测的应该是正确的。? ?2.比如验证码跨域跨服务器导致从session无法获取的问题,我们曾经遇到过;? 貌似sina登录没有涉及到验证码之类的东西,当你多次登录失败之后,它采用的是“您的登录过于频繁,请稍后再试吧”,这种方案确实比验证码要好的多,而且还避免了上面的说的问题。???3. 当我登录失败了,/sso/login.php 如何将登录的错误信息返回给 并让它进行显示呢,如果我登录成功了/sso/login.php 通过什么方式通知呢,因为它这里使用的是ajax方式登录?? 对于这方面,cas的处理是将错误信息以参数的方式返回给 client-login,如登录失败,重定向地址: ?errocode=0,如果登录成功,则直接 重定向至 service 中

文档评论(0)

kaoshabazhangla + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档