1. 程式人生 > >單點登入的實現-cookie

單點登入的實現-cookie

開發十年,就只剩下這套架構體系了! >>>   

單點登入的實現-cookie

<a name="90fd0055"></a>

單點登入的目的

同一個公司的應用,只需要登入一次。
比如我登入了支付寶,再開啟 淘寶或天貓就不用重複登入(輸入使用者名稱和密碼)。

<a name="6244a479"></a>

具體場景(Web)

小明登入了 Web應用A,再進入Web應用B時,不用重新輸入使用者名稱和密碼,就自動登入了。

<a name="a90c9ab1"></a>

問題:應用A和應用B要擁有相同的父域名嗎?

不用!!! 不用!!! 不用!!!

具體實現(基於 cookie)

otp :one time password 就是一次一密

認證中心介面

介面一:jsonp介面,獲取 otp
請求方式:jsonp
獲取 otp,同時可以判斷是否已登入
http://auth.xxx.com/authentication/otp.jsonp?callback=callbackMethod&

clientId=應用的clientId

返回
{
"isLogined":true,
"otp":"433u23"
}

注意:jsonp 介面只需要 clientId,不需要 secret
介面二:使用 otp登入
請求方式:post
http://auth.xxx.com/authentication/login.json
引數:
username:
password:
otp:介面一獲取的** otp**
imgCode:圖形驗證碼

返回:
{
"access_token":"",
"refresh_token":"",

"timeout":12000
...
}

介面三:opt 換取 access_token<br />請求方式:post<br />http://auth.xxx.com/authentication/token.json?secret=應用的secret&clientId=應用的clientId&opt=433u23
返回:
{
"access_token":"",
"refresh_token":"",
"timeout":12000
...
}

認證中心的作用

  1. 判斷是否已登入;
  2. otp 換access_token

未登入-登入流程

<br />

應用 A 已經登入,訪問應用 B 時