zoukankan      html  css  js  c++  java
  • Sina SSO 登陆过程分析

    近日研究了 Sina CAS 的登陆过程,发现其实 sina 的 sso 实现了 yale-CAS 并且添加一丁点新的东西,基本认证过程交互流程仍然未变。其独创的一点是实现了 Ajax 单点登陆,算是比较牛。实现原理是 iframe+ javaScript 回调函数。

    一,初级 SSO

    初级的 SSO ,就是在同一个顶级域名下,通过种入顶级域名的 Cookie ,来实现统一登陆。例如:

    单点登陆地址: sso.xxx.com/login.jsp

    应用 1 : web1.xxx.com/login.jsp

    应用 2 : web2.xxx.com/login.jsp

    应用 3 : web3.xxx.com/login.jsp

    登陆流程:

    情况一:(用户从未登陆)

    1,  用户访问 web1.xxx.com/login.jsp , web1 重定向到 sso.xxx.com/login.jsp

    2,  用户输入验证,成功。 sso.xxx.com 种入 .xxx.com 域 Cookie 的 tokenid ,重定向到 web1.xxx.com/login.jsp , web1.xxx.com 访问 .xxx.com 域 Cookie 的 tokenid 判断出已经登陆,系统登陆完成。

    情况二:(用户已经登陆)直接登陆。

    二, Sina SSO

    Sina 实现了跨域名的统一登陆,本质也是基于 Cookie 的。如果用户禁用 Cookie ,那么无论如何也是登陆不了的。例如: Sina SSO 服务器是 login.sina.com.cn/sso/login.php

    ,微博登陆地址为 weibo.com/login.php 。通过回调函数和 iframe 实现了跨一级域名的登陆。

    认证过程具体流程:这里只介绍用户从未登陆过。

    1,  用户进入 weibo.com/login.php

    2,  用户输入用户名称。输入完毕后,当用户名输入框焦点失去的时候,页码通过 ajax 向服务器 login.sina.com.cn/sso/prelogin.php 发送请求,参数为 user (刚刚输入的用户名)。服务返回 server time 和 nonce 认证,通过回调函数写入到 javascript 变量中。

    3,  用户输入密码,点击登陆,页面 POST 请求(注意是 ajax 请求,并不是 login.php 发送的 ),

    login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.12) ,请求的发起的页面是 weibo.com/login.php 中的一个不可见 iframe 页面,参数为第二步得到的 server time 和 nonce ,已经用户名称和加密的密码。返回种入 Cookie  tgt 在 login.sina.com.cn 下。同时修改 iframe 地址为 weibo.com/ajaxlogin.php?ticket=XXXXXX, 注意 ticket 非常重要,这是用户登陆和服务的凭证。

    4,  iframe 访问 weibo.com/ajaxlogin.php?ticket=XXXXXX ,用户登陆,返回种入 cookie 在 .weibo.com 下,记录用户登陆信息。

    5,  通过 js 再次访问 weibo.com/login.php ,因为 cookie 已经写入,登陆成功,服务器发送 302 ,重定向到用户主页面。 Weibo.com/userid 。

    6,  至此,登陆过程完成。
  • 相关阅读:
    Get distinct count of rows in the DataSet
    单引号双引号的html转义符
    PETS Public English Test System
    Code 39 basics (39条形码原理)
    Index was outside the bounds of the array ,LocalReport.Render
    Thread was being aborted Errors
    Reportviewer Error: ASP.NET session has expired
    ReportDataSource 值不在预期的范围内
    .NET/FCL 2.0在Serialization方面的增强
    Perl像C一样强大,像awk、sed等脚本描述语言一样方便。
  • 原文地址:https://www.cnblogs.com/Traner/p/2819989.html
Copyright © 2011-2022 走看看