OAuth2.0 在 SSO中的應用~

關於OAuth2.0的介紹,請看下面連接(講的挺好的):算法

http://blog.csdn.net/seccloud/article/details/8192707cookie

個人理解:網站

一共四個角色,A:Client(訪問者),B:資源擁有者,C:權限控制平臺,D:資源中心url

訪問流程:Client(訪問者)向 資源擁有者索要 資源訪問權限, 資源擁有者 給 Client(訪問者)開個受權書,Client(訪問者)拿着受權書到  權限控制平臺 索要訪問令牌,Client(訪問者)獲取令牌,憑令牌訪問資源.net

打個不恰當比法:C 欠 A 一筆錢,A沒時間去向C 討債,因而A給B開個委託書讓B去拿錢,C 看了委託書確認了A確實委託了B,也確認了B的身份,因而C給了B一把保險櫃的鑰匙,讓B 本身去取錢。blog

以上兩個例子,相信你己瞭解什麼是OAuth2.0了吧。token

 

關於SSO 理解資源

去年看了博客園某大神的大做以後,記下了筆記沒留URL,現就對着筆記進行回顧下。博客

客人訪問A站點,須要登陸,因而跳轉到SSO進入登陸,backurl帶上A站點的URL,當登陸成功以後,跳回A站點,並給SSO的憑證與A站點的憑證。oauth2.0

客人從A站點跳轉到B站點,B站點須要驗證客人的身份,帶上SSO的憑證到SSO進入驗證,經過以後,給B站點發B站點的憑證。

一個邏輯:接入站點先判斷是否有SSO的憑證,有則判斷是否有接入站點憑證。若沒有SSO的憑證,有接入站點憑證需從新登陸。如有SSO的憑證,沒有接入站點憑證,從SSO站點獲取接入站點憑證。

 

如今的問題是怎麼將這二者結合一塊兒成爲一個系統?!

OK大片來了,如下將模擬騰訊開放平臺中的QQ受權登陸(如下內容僅我的結合oauth2.0與sso業務邏輯想象出來,還未驗證)。
 
現有兩個子站點如A.com ,B.com ,還有個是統一登陸平臺(sso.com)
 
首先接入站點須要從sso.com中獲取私鑰,指定一個notify頁面。
1,客人client訪問A.com ,須要登陸A.com網站,跳轉到sso.com指定頁面(如:/login),帶上redirect_url就是a.com的URL。
2,在這個登陸頁上輸入賬號及密碼登陸成功以後,sso.com 會向a.com  以前提交的nofity頁面回發用戶的票據及state(公鑰)。
3,a.com  的notify頁面接受到票據與公鑰以後,將本身的私鑰與公鑰 按照簡單的算法處理下,再MD5以後,一塊兒發回 sso.com,sso.com拿到a.com的身份信息以後確認正確,再將Token發給a.com。
4,sso.com發送token以後,再跳轉回a.com的頁面(redirect_url)。
 
 
根據個人設想與實際操做騰訊單點登陸, 登陸成功以後,會有較長時間在那等待,就是在完成,發送票據、驗證client身份、下發token 的過程。
 
 
【轉載請標註,From http://www.cnblogs.com/jackicalSong/】 
以上邏輯未進行生產驗證,僅一個思路,後期有時間,我會驗證下。
 
 
 
------------------------------------- 補充 : 樓下有哥們提出沒有 B.com 什麼事,確實是我疏忽了 ,現補充下(表示很尷尬。。)

A.com 與 B.com  因爲涉及到跨站,因此給了A.com的Token B.com讀不到(通常使用cookie 存Token), 若權限確實容許 A.com 與 B.com 能夠只認證一次,在A.com時己獲取訪問權限時,再轉入B.com時,須要再次向 sso.com再次請求,但時sso.com在上次保留了 用戶的登陸憑據,因此不須要用戶再次輸入賬號及密碼,直接下發B.com的 Token ,再跳轉到B.com 。實現免登陸功能。 

相關文章
相關標籤/搜索