首頁 >後端開發 >php教程 >Sina SSO 登陸流程分析

Sina SSO 登陸流程分析

巴扎黑
巴扎黑原創
2016-12-01 11:14:111297瀏覽

近日研究了 Sina CAS 的登陸過程,發現其實 sina 的 sso 實現了 yale-CAS 且增加一丁點新的東西,而基本認證流程互動流程仍不變。其獨創的一點是實現了 Ajax 單點登陸,算是比較牛隻。實作原理是 iframe+ javaScript 回呼函數。

一,初級 SSO

初級的 SSO ,就是在同一個頂級域名下,透過種入頂級域名的 Cookie ,來實現統一登陸。例如:

單點登陸網址: sso.xxx.com/login.jsp

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

應用 2 : web. : web3.xxx.com/login.jsp

登陸流程:

情況一:(使用者從未登陸)

1,  使用者造訪 web1.xxx.com/login.jsp , web1  使用者造訪 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 的 tokenxxx.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/ssogin/login.php? (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,  至此,登陸程序完成。

 

重點:互動過程與密碼加密演算法分析。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn