`
denger
  • 浏览: 359514 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
     最近在使用sina微博时,经常性交替使用 weibo.com 和 t.sina.cm.cn进入我的微博。发现当我在 t.sina.com.cn中登录之后,直接切换至weibo.com,这时候在 weibo.com是已经登录的,当我在 weibo.com进行注销之后,再切换至 t.sina.com.cn,这时候在 t.sina.com.cn也已经是注销的状态了。

     对于SSO的实现方案及其机制,早已经不是什么新鲜的技术了,从微软为.net提供的passport机制到java中开源的JBoss SSO、Oracle OpenSSO及经典的 Yale CAS等等之类的开源或一些商业SSO中间件都不失为作为单点登录实现的选择。当然一些企业也会选择自己实现一套适合自己轻量级方案,如采用SESSIONID转递或SESSION同步复制之类的。 可以看得出SSO的价值也是具大的,就拿sina来说吧,增加 weibo.com域名之后,对于用户来说来说没有任何影响,即使你在 t.sina.com.cn中进行登录,可以无缝在两域名之间随意切换,对于它推广weibo.com无非是大大的益处。

    由于近年来一直在使用 Yale的CAS作为SSO的方案,觉得 SINA的SSO与Yale-CAS有很多异曲同工之妙,于是便对SINA的SSO进行分析,其中的细节处理还是很值的学习的。当然,由于分析看到的SINA SSO处理都只是一些表现或表面上的东西,再加上其大部分关键的sso js都已经被压缩,及SERVER端的实现机制也只是靠自己的经验及结合CAS的的一些原理进行猜测。其实本文应该叫 <CAS SSO与SINA SSO的实现对比分析>更比较贴切。
  
    好吧,进入正题。


  • Sina SSO之分析篇
    首先是进入 t.sina.com.cn,提交用户名及密码进行登录,通过 Firebug可以看到它通过类似Aajx POST到了 http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.12),如下图所示:
   

    不难看出,其 http://login.sina.com.cn/sso/login.php 就是类似是 CAS 中的 Server,对sina的所有应用系统提供的统一登录入口。上面的参数中有一个service参数,了解 CAS的GG应该知道 cas 在登录的时候除了username 和 password同样也有一个 service 参数,其CAS该参数含义是子应用系统的服务名标识及登录成功之后所跳转的地址。当然,sina这里使用了 "miniblog"作为微博的服务名,估计他在sso-server端对 miniblog 与登录成功之后的地址进行映射,如 miniblog=http://t.sina.com.cn/,这样就避免了CAS-client中转入service= decodeURIComponent('http://t.sina.com.cn')之类的做法了。

    这里的登录与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:
               以上截图是当我首次进行 t.sina.com.cn时,通过 ajax/jsonp的方式发起的一个请求,可以看到返回的callback函数中的 json 串中包含了 nonce:"SXK19N"的属性,参数名的汉译是“一次”或“一次性”的意思,估计这里的 nonce就是login-ticket,为再一次确实,我再试着提交登录看看,看它是否将该参数POST过去:
      
       果然不出所料, nonce:"SXK19N"作为参数提交过去了,证明所猜测的应该是正确的。

  2.比如验证码跨域跨服务器导致从session无法获取的问题,我们曾经遇到过;
        貌似sina登录没有涉及到验证码之类的东西,当你多次登录失败之后,它采用的是“您的登录过于频繁,请稍后再试吧”,这种方案确实比验证码要好的多,而且还避免了上面的说的问题。

     3. 当我登录失败了,/sso/login.php 如何将登录的错误信息返回给 t.sina.com.cn并让它进行显示呢,如果我登录成功了/sso/login.php 通过什么方式通知t.sina.com.cn呢,因为它这里使用的是ajax方式登录?
       对于这方面,cas的处理是将错误信息以参数的方式返回给 client-login,如登录失败,重定向地址: http://cas-client.com?errocode=0,如果登录成功,则直接 重定向至 service 中的url,并生成ST给客户端,表示其已经在cas-server登录成功了。
       看看sina如何处理的吧,随便输入一个用户名密码,提交登录,继续通过firebug看看它的处理过程:
  
        再看看t.sina.com.cn 中的html内容的变化:
       
       
    以上图1中发生了两次请求,第一次登录验证是访问 sso认证中心,它所返回response是一个html内容,第二次请求的地址: http://t.sina.com.cn/ajaxlogin.php framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=4038&reason=%B5%C7%C2)
    再结合以上图2信息,看到 html 中发生了变化,创建了一个 id=ssoLoginFrame 的iframe,于是便可以得出,sina 的登录并非原生的ajax方式,而是通过创建iframe来模拟提交不刷新的登录。也就是说,当用户点击登录提交时,这时候它会通过js创建iframe,将登录提效至该iframe中。
         既然已经知道它登录是提交到iframe中,而非ajax方式,那么对于以上截图1中两个请求为什么返回的都是HTML内容就很容易解释了。再回到上面的问题,/sso/login是如何通知t.sina.com.cn登录失败了呢? 首先在以上第一个截图中返回的 HTML包含了一段 javascript:
       
location.replace("http://t.sina.com.cn/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=4038&reason=%B5%C7%C2%BC%B3%A%BC%B3%A2%CA%D4%B4%CE%CA%FD%B9%FD%D3%DA%C6%B5%B7%B1%A3%AC%C7%EB%C9%D4%BA%F3%D4%D9%B5%C7%C2%BC");

         location.replace的意思与location.href类似,同样都是改变当前的URL地址,具体区别及做法可以参考这里这里。需要注意的这里所说的通过location.replace改变当前的URL其它并非改变t.sina.com.cn的地址,而是第二个截图里iframe中src的地址,因为这段HTML是在iframe中输出的。
       在  locaiton.replace 的地址中包含了一个 retcode 及 reason参数,估计这就是当前登录的错误信息。在上面第一个截图的第二个请求实际就是在iframe 中进行的 location.replace操作后的跳转地址。关键看它输出的html内容:
  
<html><head>
<script language='javascript'>
 parent.sinaSSOController.feedBackUrlCallBack({"result":false,"errno":"4038","reason":"\u767b\u5f55\u5c1d\u8bd5\u6b21\u6570\u8fc7\u4e8e\u9891\u7e41\uff0c\u8bf7\u7a0d\u540e\u518d\u767b\u5f55"});</script></head><body></body></html>null

      这段js是在 iframe中执行的,所以可以通过 parent 进行访问 t.sina.com.cn中的js,可以肯定 parent.sinaSSOController.feedBackUrlCallBack 就是告诉 t.sina.com.cn 当前已经登录失败了,并且将错误信息传至该入该callback了。至此,已经完成了 /sso/login.php 对 t.sina.com.cn的信息传送。 新浪果然是有一手呀,在CAS中AJAX登录一直都是一个问题,而sina它巧妙的通过iframe+callback 进行实现了。
      接着,再看看它对于登录成功之后如何通知 t.sina.com.cn的吧,先看看登录成功之后 sina-sso-server 会做什么,看firebug截图:
      
       重点在于 set-Cookie: tgc=TGT-MTc4NTc0NzM0Mw==-1305003116-ja-D51B2EB107B79FC50D8CA424BFE08907;  哈哈,熟悉CAS的应该会很熟悉这个,没想到SINA的TGT与CAS的TGT不但参数命名,居然连生成的规则也一模一样,估计sina肯定是参考了 cas 的实现机制。关于TGT是什么或其作用可以参考:CAS总结之Ticket篇。另外还有一个就是当登录成功之后,sina-sso-server会将用户登陆名等等放在sina.com.cn根域的cookie中。
       然后再看看登录成功之后 sina-sso-server所返回的response内容:
      
       以下是从以上摘取JS部分:
      
<script>
try{sinaSSOController.setCrossDomainUrlList({"retcode":0,"arrURL":["http:\/\/weibo.com\/sso\/crosdom?action=login&savestate=1305607916"]});}catch(e){}try{sinaSSOController.crossDomainAction('login',function(){location.replace('http://t.sina.com.cn/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=0');});}catch(e){}
</script>

      首先再次声明,以上firebug截图中的请求处理,并非 AJAX,而是在 t.sina.com.cn中放了一个iframe,输出的 reponse都会至iframe当中.    
      以上的js主要重点在于:
     
location.replace('http://t.sina.com.cn/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=0')

      还是通过设置当前iframe中src地址,再看看跳转至http://t.sina.com.cn/ajaxlogin.php后的response内容吧:
     
      返回用户信息(从cookie中获取的),并且还是类似上面的做法,通过 parent.sinaSSOController.feedBackUrlCallBack回调t.sina.com.cn中的js,告诉它这个用户已经登录成功了。
      于是t.sina.com.cn便进行跳转至 t.sina.com.cn/dengers 中,从而实现登录。
     
      整体的处理流程如下:
     


      4. 当我在t.sina.com.cn中登录后,切换至weibo.com,weibo.com我应该也是已经登录的,如何做到呢?
       对于这个问题,CAS中的处理就是,当我进入 weibo.com的时候,马上跳转至  /cas/login,然后在login中判断cookie是否存在TGT,如果存在,并确定其有效性后,则认为你已经登录,并为你生成一个ST,将ST作为ticket参数使其重定向至 weibo.com?ticket=TG-xxxx 并登录。
      看看sina怎么处理的吧,首先我直接在t.sina.com.cn登录成功。然后再新建一个选项卡,输入 weibo.com:
     
      可以看得出,当我进入 weibo.com之后,sina并没有直接进入 weibo.com的主页,而是马上重定向至:  http://login.sina.com.cn/sso/login.php?url=http%3A%2F%2Fweibo.com%2F&_rand=1305008634.5127&gateway=1&service=miniblog&useticket=1&returntype=META  与cas的做法确实一致。 再看看该 login.php的Response 信息,主要是JS:
      
		<script type="text/javascript" language="javascript">
		location.replace("http://weibo.com/sso/login.php?url=http%3A%2F%2Fweibo.com%2F&ticket=ST-MTc4NTc0NzM0Mw==-1305008634-ja-694BA43623A3F72999AE7129A0572048&retcode=0");
		</script>

      看到这里之后,不得不怀疑 SINA 的 SSO 是不是用的就是 CAS 啊!!不但连 TGT 参数名一样,连ST规则及参数名也一模一样,其处理机制也十分相似。
      到这里之后就与 CAS 的处理一样了,就不详细写了,可以参考 CAS相关文章。

──────────
PS:由于在分析过程中里面的很多SSO关键JS都压缩了,所以难免会存在误差。 不过SINA的SSO很多细节方面确实处理的很好,作为互联网应用的话,如果单纯的只是把 CAS DOWNLOAD 下来,然后直接配配就用的话很多方面的处理还是很不到位的。 有时间我把我们CAS参考 SINA 调整一下。



    到这里,不得不说的一个事情就是,之前在分析淘宝cookie如何跨域获取时,大家都说出了一个taobao的jsonp实际存在一定的安全隐患。后面那个淘宝的GG看到之后加入Refer的判断。而现在,在分析的过程中发现新浪也有这样的问题,可以尝试一下,随便在本地建立一个html,引入jquery,然后使用下面的JS,就可以获取到sina中的登录邮箱名等信息,前提是你需要先在sina中登录:
 
$.ajax({url: 'http://t.sina.com.cn/ajaxlogin.php?framelogin=0&callback=?&retcode=0', dataType:'jsonp',
				success:function(data){
					alert(data.userinfo.userid);
				}});


  • 大小: 50.6 KB
  • 大小: 26.4 KB
  • 大小: 37.5 KB
  • 大小: 40 KB
  • 大小: 134.6 KB
  • 大小: 56 KB
  • 大小: 29 KB
  • 大小: 35.9 KB
  • 大小: 103.5 KB
  • 大小: 110.8 KB
  • 大小: 134.6 KB
  • 大小: 85.2 KB
分享到:
评论
25 楼 wiwengweng 2013-05-20  
denger 写道
fangin 写道
ln1058 写道
我怎么觉得没必要这么麻烦呢。
如果是我来做,直接通过cookie来判断用户是否为登录状态,然后在进行相关的URL跳转。
这种网站对于用户的安全性都不高,真有必要这么麻烦吗?

你不能因为用户禁用cookie就登陆不上去啊

你说的没错,不过遗憾的是 sina当你禁用了cookie你确实登录不上去。貌似连iteye也是这样。



现在怎样呢?我在firefox中清理并禁用了cookie,微博登陆之后,在sina主页还是看到我已经登陆的信息。
24 楼 sucksucker 2012-03-07  
  最近在使用httpclient3 模拟新浪登录,但是根据用浏览器抓包的结果,
aweber 写道
呵呵。新浪动作真快,现在的sso不是你这种模式咯。
是采用P3P协议,t.sina.com.cn登录成功的话,会自动让用户请求一次weibo.com的http://weibo.com/sso/crosdom?action=login&savestate=1305728014&callback=sinaSSOController.doCrossDomainCallBack&scriptId=ssoscript0&client=ssologin.js(v1.3.12)&_=1305123230285 脚本设置COOKIE


和你说的情况一样,这是一次调用 之后还有一次 是 scriptId=ssoscript1 的,想要用httpclient3 模拟(在Java下), 关键是后面那个 &_=1305123230285实在是不知道怎么获取,前6位事实上是和TGC 中的那个数字前6位一样,但是后面是什么呢?怎么生成的呢,这两次跨域的调用脚本应该是必须模拟的,因为我直接用post后返回的 replace.location 后面的网址是显示cookie:rejected的警告,外加返回responsebody=null 根本什么都没有,有什么方法么?
23 楼 yq76034150 2011-06-08  
悲剧的是 从sina通行证 登录不能和 weibo单点了,这次改动有点失败
22 楼 wangchong0114 2011-05-31  
好文章
一点一点的分析
很细致
21 楼 java_bigniu 2011-05-30  
真正的大牛就是这样炼成的
20 楼 莫小泽 2011-05-20  
详细看了下, 还是有很多不了解的地方。
楼上很多朋友都说cookie判断饿。
我这里跨域了。。想获取cookie都获取不到。在看各种关于跨域的文章。。希望能解决自己的问题
19 楼 denger 2011-05-19  
popoer 写道
请楼主再分析一下统一注销是如何实现的吧,我觉得这个比统一登录更难搞哎

好的,等放假的时候结合CAS进行分析一下,现在太忙了。
18 楼 popoer 2011-05-18  
请楼主再分析一下统一注销是如何实现的吧,我觉得这个比统一登录更难搞哎
17 楼 llyzq 2011-05-13  
受益颇丰啊

有些内容还没能理解

需要慢慢看
16 楼 fhx007 2011-05-12  
好贴,分析的很透彻
15 楼 denger 2011-05-12  
@aweber 你说的这个问题我昨天已经发现了,晚上我说说为什么会这样,现在太忙.....
14 楼 aweber 2011-05-12  
<p><br><br> [quote=&amp;quot;denger&amp;quot;] <br>基于上面的分析,提出的一个问题就是:当我进入weibo.com,我什么时候才需要重定向至 /sso/login.php 进行自动登录呢?   于是,基于这个问题,就不难判断出在 t.sina.com.cn中登录成功之后,为什么要去set weibo.com中的cookie了。因为按正常逻辑来说,只有当我已经登录成功过(不管在哪登录成功),我进入 weibo.com之后你才需要为我重定向至 /sso/login.php去自动登录,而不是进入无意义的重定向。 那么这时候当我在 t.sina.com.cn登录成功,并且在t.sina.com.cn中去设置 weibo.com的cookie,于是我再直接进入 weibo.com,这时候weibo.com首先做的不是直接重定向至 /sso/login.php进行登录,而是判断当前cookie是否存在某个已登的标识,如果存在的话我再重定向至 /sso/login.php进行自动登录,从而避免无意义的重定向。 <br>[/quote=&amp;quot;denger&amp;quot;] <br><br>基于测试,发现新浪的设置微博通过P3P协议设置weibo.com域下cookie确实是为了判断是否有必要到/sso/login进行验证登录。 <br>不过我有个以为。既然已经通过P3P设置了weibo.com域下的cookie了。weibo.com为什么不直接通过cookie信息来判断用户是否登录。完全没必要到/sso/login去验证然后再返回。我能想到的有两个原因: <br>1,安全方面的考虑 <br>2,以后其他应用在登录机制扩展方面的考虑 <br><br>而且我发现我之前的测试都是在先在t.sina.com.cn登录,后使用weibo.com查看的顺序来。 <br>这次我为了验证第一条,就反过来,现在weibo.com进行登录,登录成功之后,接着直接访问t.sina.com.cn,发现t.sina.com.cn没有到/sso/login进行验证就直接判断为登录状态了,由此可以推测是通过cookie信息来进行验证的。既然t.sina.com.cn可以通过cookie信息来验证,那么就不存在第一条,安全方面的考虑。 <br><br>ps:在上面的验证过程中,我又发现了一个问题(真是头大,一个接着一个),在weibo.com的登录过程中,我没有发现哪个请求设置了t.sina.com.cn的cookie信息。。。。发现只有一条设置了COOKIE,但是是这只在login.sina.com.cn域下(见图一)。t.sina.com.cn应该是读不到的才对。但是事实是t.sina.com.cn就是读到了(见图2)。。 <br><br>至于第二条原因,可能验证登录的业务逻辑很复杂(什么权限控制啊,是否限制登录啊。还有N多七七八八的原因),不能放每个应用都去用程序实现这个业务逻辑判断,所以才独立出一个/sso/login的登录系统出来。 <br><br></p>
<p> <img src="http://dl.iteye.com/upload/attachment/479858/af635406-7e14-3ece-b925-8536453eb959.jpg" alt=""></p>
<p>图一</p>
<p> </p>
<p> </p>
<p><img src="http://dl.iteye.com/upload/attachment/479860/026bd94a-a649-3c35-abcb-17f52d3b28a7.jpg" alt=""></p>
<p>图二<br> </p>
13 楼 游侠飞飞 2011-05-12  
mark  技术贴
12 楼 denger 2011-05-12  
aweber 写道
呵呵。新浪动作真快,现在的sso不是你这种模式咯。
是采用P3P协议,t.sina.com.cn登录成功的话,会自动让用户请求一次weibo.com的http://weibo.com/sso/crosdom?action=login&savestate=1305728014&callback=sinaSSOController.doCrossDomainCallBack&scriptId=ssoscript0&client=ssologin.js(v1.3.12)&_=1305123230285 脚本设置COOKIE

不是新浪改了,而是这一块我没有分析到而已了,sina本身的SSO方式还是没有变的.
首先分析一下为什么在t.sina.com.cn中登录成功之后要在有这段请求吧?
可以肯定的是,这段请求是在 t.sina.com 中的 iframe 中通过   ajax/jsonp方式发起的,可以看如下图:

估计它是通过在iframe中的这段JS发起的请求:
sinaSSOController.setCrossDomainUrlList({"retcode":0,"arrURL":["http:\/\/weibo.com\/sso\/crosdom?action=login&savestate=1305731311"]});}

先不管它P3P的目的何在,先看看它这段请求对 weibo.com 域名做了哪些事,下面的截图是当我在 t.sina.com.cn 中登录成功之后,weibo.com中的cookie信息:

绝就绝在这里,它这段cookie是在什么时候加入进去的呢? 可以看出从 t.sina.com.cn中提交用户名到登录成功,整个过程中与weibo.com打过交道的; 只有以上第一个截图中的第二个请求,也就是你所说那个请求,那么就可以肯定的说 weibo.com中的cookie信息是通过在t.sina.com.cn这个域名下的iframe里面采用ajax/jsonp去请求weibo.com去设置的(也就是传说中的跨域设置cookie),看完这个链接之后,我想你应该猜出为什么 sina.com要使用P3P了。

好吧,再分析它为什么要这么麻烦去设置weibo.com中的cookie吧?
这篇文章中也提到,Sina的SSO判断用户是否已经登录了,是依赖于login.sina.com.cn/sso/login.php中cookie的,类似cas的做法:
denger 写道
CAS中的SSO处理就是,当我进入 weibo.com的时候,马上跳转至  /cas/login,然后在login中判断cookie是否存在TGT,如果存在,并确定其有效性后,则认为你已经登录,并为你生成一个ST,将ST作为ticket参数使其重定向至 weibo.com?ticket=TG-xxxx 并登录。如果不存在则重新返回至weibo.com中,需要你进行登录

如果sina是直接采用CAS的做法,每次进入 weibo.com 我都会重定向至  /sso/login.php判断这个用户是否登录过, 那就会造成我本身从来就没有登录过,然后刷新一下或每进入 weibo.com它就会重定向至 /sso/login.php(因为对于weibo.com域来说他不知道你是否已经通过其它域名在/sso/login.php登录成功了),然后/sso/login.php发现你没有登录过,又给你跳回来weibo.com中让你登录,再次回到weibo.com之后,weibo.com发现你没有登录,又会跳转至/sso/login.php,于是又跳回来...死循环就来了,虽然它可在第一次回到weibo.com的时候加一些标识表示不需要进行再去/sso/login.php了,不过最终这样来回的进行无意义的重定向不太好吧,为什么说无意义呢,因为我本身就从来没有登录过,你为什么还要让我跳转至 /sso/login.php进行自动登录呢?

基于上面的分析,提出的一个问题就是:当我进入weibo.com,我什么时候才需要重定向至 /sso/login.php 进行自动登录呢?   于是,基于这个问题,就不难判断出在 t.sina.com.cn中登录成功之后,为什么要去set weibo.com中的cookie了。因为按正常逻辑来说,只有当我已经登录成功过(不管在哪登录成功),我进入 weibo.com之后你才需要为我重定向至 /sso/login.php去自动登录,而不是进入无意义的重定向。 那么这时候当我在 t.sina.com.cn登录成功,并且在t.sina.com.cn中去设置 weibo.com的cookie,于是我再直接进入 weibo.com,这时候weibo.com首先做的不是直接重定向至 /sso/login.php进行登录,而是判断当前cookie是否存在某个已登的标识,如果存在的话我再重定向至 /sso/login.php进行自动登录,从而避免无意义的重定向。

对于以上的分析,你可以进行测试一下我说的是否符合逻辑:
  test1: 首先先将你本地的所有sina.com.cn 和 weibo.com中的cookie清空,然后在正常通过 t.sina.com.cn进行登录成功,这时候再新建一个选项卡,直接输入 weibo.com ,你会发现它马上会重定向至 /sso/login.php进行自动登录了。
      test2: 然后再分别注销,同样再删除sina.com.cn及weibo.com中的cookie,再正常通过 t.sina.com.cn 进行登录成功,这时候打开cookie管理器,将 weibo.com 中的所有cookie再全部删除,然后再新建一个选项卡,直接输入weibo.com,这时候你发现它不会进入重定向至 /sso/login.php了。而此时在weibo.com中是处于非登录状态,而在t.sina.com.cn中是处登录状态。这是因为进入weibo.com它未从cookie找到你已登录的标识,所以它认为你从来没有登录过,于是就不进入 /sso/login.php 进行自动登录了。
      test3:在sina.com.cn及weibo.com中都处于未登录状态,然后直接进入weibo.com,与test1对比起来,为什么它不会先重定向至 /sso/login.php了呢?在weibo.com中是根据什么来判断是否需要重定向至 /sso/login.php?通过test2的测试我想也不用我说了吧。

  如果按你说的,那么在test1中t.sina.com.cn中登录成功并且已经设置weibo.com中的cookie,为什么进入weibo.com还要去重定向 /sso/login.php去自动登录呢。

11 楼 lydawen 2011-05-11  
sso 普遍是基于cookie,一个统一的认证中心来负责维护认证这个cookie。
10 楼 aweber 2011-05-11  
呵呵。新浪动作真快,现在的sso不是你这种模式咯。
是采用P3P协议,t.sina.com.cn登录成功的话,会自动让用户请求一次weibo.com的http://weibo.com/sso/crosdom?action=login&savestate=1305728014&callback=sinaSSOController.doCrossDomainCallBack&scriptId=ssoscript0&client=ssologin.js(v1.3.12)&_=1305123230285 脚本设置COOKIE
9 楼 jeho0815 2011-05-11  
看的有点困难啊,实力太差了!
8 楼 tengfei3003 2011-05-11  
分析透彻,好好研究研究
7 楼 xiang37 2011-05-11  
支持一个,最近在研究sso,现在想先做个cas的实例出来。
6 楼 aweber 2011-05-11  
亮点是 iframe调用父窗口js函数的解决方法。居然在当前域名下整了一个跳转页面,在跳转页面里面调用父窗口地址。NB。
我之前都是 在子iframe里面再包含一个iframe,简称孙iframe,孙iframe和父窗口同域名,也就是跳转页面,在孙iframe里面调用父窗口的函数

相关推荐

    最新新浪微博SSO授权认证SDK源码修改,另附API调用demo

    所谓SSO认证,通俗的一点讲就是,自己写的app需要使用新浪或腾讯微进行分享、发表微博等操作。如果用户的手机客户端安装了符合SSO认证的新浪、腾讯等微博客户端版本且已登录,则会自动启动新浪、腾讯等微博客户端...

    新浪微博AndroidSDK最新

    **正文** 微博SDK,全称为Sina Weibo Software Development Kit,是新浪官方为开发者提供的一套集成工具,便于在Android...通过深入理解SDK的各个部分,开发者可以轻松实现微博社交功能,提升应用的用户体验和互动性。

    新浪微博2模拟登陆

    今天我们将聚焦于“新浪微博2模拟登陆”这一主题,学习如何通过编程方式模拟登录并获取AccessToken,以便进行自动化操作或者数据分析。 首先,我们需要了解什么是模拟登陆。模拟登陆是指通过编程代码来模拟用户在...

    Android平台下Facebook,Google service, 新浪微博接入第三方应用SSO授权教程

    对于Android开发者来说,集成Facebook、Google服务和新浪微博的SSO授权需要遵循特定的步骤和使用相应的SDK。以下是详细的过程: **1. 新浪微博接入流程:** 首先,你需要从官方GitHub仓库...

    新浪微博SDK

    这个SDK包含了Android平台上实现微博登录、分享、获取用户信息等核心功能所需的类库和文档,让开发者可以方便地集成到自己的应用中,提升用户体验并扩大应用的社交影响力。 在描述中提到的"新浪微博联合登陆api sdk...

    新浪微博登录代码实现

    在Java编程环境中,实现微博登录通常需要以下步骤: 1. **导入依赖库**:使用像`HttpURLConnection`或`OkHttp`这样的HTTP客户端库,它们可以帮助我们发送HTTP请求。 2. **构建登录请求**:创建一个POST请求,设置...

    新浪微博android sdk

    这个“新浪微博android sdk”包含了一系列必要的组件、文档和示例代码,使得开发者能够轻松地实现与新浪微博的交互,比如用户登录、分享内容、获取用户信息等功能。以下是这个SDK的一些核心知识点: 1. **API文档**...

    qq和新浪微博授权登陆

    总结来说,QQ和新浪微博授权登录提供了安全且便捷的用户认证方式,简化了用户的登录体验,同时也帮助开发者快速实现用户管理功能。在实际开发中,需要注意处理好用户隐私和安全问题,确保授权流程的顺畅,同时遵守两...

    新浪微博登录网站

    3. **错误处理**:在实现微博登录功能时,必须考虑到可能出现的错误情况,如授权失败、令牌过期等,要有相应的错误处理机制。 4. **响应式设计**:为了适应不同设备的用户,登录界面应具有良好的响应式设计,确保在...

    PHP采纳curl仿照用户登陆新浪微博发微博的方法_.docx

    在PHP中,使用cURL库可以实现模拟用户登录和执行特定任务,例如在本例中是登录新浪微博并发布微博。cURL库提供了一个功能强大的接口,用于与远程服务器进行交互,包括发送HTTP请求、设置请求头和POST数据等。 首先...

    最新腾讯微博SSO授权认证SDK源码修改,另附API调用demo

    所谓SSO认证,通俗的一点讲就是,自己写的app需要使用新浪或腾讯微进行分享、发表微博等操作。如果用户的手机客户端安装了符合SSO认证的新浪、腾讯等微博客户端版本且已登录,则会自动启动新浪、腾讯等微博客户端...

    基于JWT实现SSO单点登录流程图解

    基于JWT实现SSO单点登录流程图解 基于JWT实现SSO单点登录流程图解是指使用JSON Web Token(JWT)来实现单点登录(SSO)的机制。在这种机制中,用户只需要登录一次,就可以访问多个应用服务器上的资源,而不需要再次...

    新浪微博 oauth2 模拟登录

    在本文中,我们将深入探讨如何使用OAuth2协议模拟登录新浪微博,并了解相关技术细节。OAuth2是一种授权框架,允许第三方应用代表用户与服务提供商进行交互,例如发布微博。在这个例子中,我们将使用Java的Apache ...

    spring boot 实现SSO单点登陆

    spring boot整合spring security 实现SSO单点登陆 完整DEMO. 1、配置本地hosts 127.0.0.1 sso-login 127.0.0.1 sso-resource 127.0.0.1 sso-tmall 127.0.0.1 sso-taobao windows系统的路径在C:\WINDOWS\system...

    ssm redis实现sso单点登录

    在本文中,我们将深入探讨如何使用SSM(Spring MVC、Spring、MyBatis)框架结合Redis缓存来实现SSO功能。 首先,了解SSO的核心原理是关键。SSO主要依赖于票据(Ticket)的概念,当用户成功登录到一个系统时,服务器...

Global site tag (gtag.js) - Google Analytics