在學習其餘應用場景前,須要瞭解幾個客戶端的受權模式。首先了解下本節使用的幾個名詞html
Resource Owner:資源擁有者,文中稱「user」;瀏覽器
Client爲第三方客戶端;服務器
Authorization server爲受權服務器;網絡
redirection URI:簡單理解爲取數據的地址;學習
User Agent:用戶代理,本文中就是指瀏覽器;spa
這裏把訪問資源服務器簡單理解成取數據。代理
下面以我本身的理解加上對話的形式來簡要說明。日誌
User:Client,這是個人redirection URI,user ID和Password,你去幫我拿些數據吧。code
Client:好的,沒問題!(轉向Authorization server)Authorization server,這是user的user ID和Password,我要去拿user須要的數據。server
Authorization server:給的user ID和Password正確,給你access token和refresh token,去拿數據吧。
User:Client,這是個人redirection URI,你去幫我拿些數據吧,可是我不會提供帳號密碼。
Client:這樣啊,那咱們找Authorization server吧,讓它來當中間人。
Authorization server(很負責任):User,你是要讓Client幫你拿數據嗎。
User:是啊,這是個人redirection URI。
Authorization server:Client,給你個受權碼authorization code,你拿着authorization code和user給你redirection URI給我驗證吧。
Client:好,這是authorization code和user給我redirection URI,我要去拿數據了。
Authorization server:能夠,驗證沒問題了,給你個access token和refresh token,你去拿數據吧。
User:Client,這是個人redirection URI,你去幫我拿些數據吧,可是我不會提供帳號密碼。
Client:這樣啊,那咱們仍是找Authorization server吧,讓它來當中間人。
Authorization server:User,你是要讓Client幫你拿數據嗎。
User:是啊,這是個人redirection URI。
Authorization server:(瀏覽器登場)瀏覽器,這是user的redirection URI和access token的碎片,你來幫他搞吧。
瀏覽器(很委屈):只給access token的碎片弄不了啊,我仍是問redirection URI怎樣才能把這些碎片拼完整吧。
redirection URI的老大(資源服務器):給你個網頁,裏面有方法把access token的碎片拼起來。
瀏覽器:Client,access token拼好了,你用access token去拿數據吧。
Implicit模式經過user的瀏覽器成功拿到了access token,相對於authorization code模式,省去了受權碼部分。
而密碼模式,須要user提供帳號和密碼進行驗證。假若user的帳號密碼可讓Client獲取到,可使用密碼模式,但要確保Client不被黑了。
Hybrid模式是結合了Implicit模式和authorization code模式。如下是我對Hybrid模式的理解,若有不對的地方,歡迎指正!
User經過身份認證後,ID token和相似受權碼authorization code等信息被傳輸到瀏覽器,Client經過瀏覽器獲取到authorization code,而後從Authorization server獲取到access token和refresh token。
最後說下refresh token
獲取到access token後,它是默認有效時間爲3600秒/1小時,能夠在new Client的AccessTokenLifetime進行設置。通常狀況下,access token失效後,用戶須要從新受權,Client才能拿到新的access token。但有了refresh token後,Client檢測到access token失效後,可直接向Authorization server申請新的access token。固然,refresh token也是有有效期的。
AbsoluteRefreshTokenLifetime的默認有效期爲2592000秒/30天。SlidingRefreshTokenLifetime的默認有效期爲1296000秒/15天。
refresh token支持hybrid,authorization code,device flow 和 resource owner password flows等模式 。
本節圖片轉自阮一峯的網絡日誌:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
以上是我的對客戶端的受權模式的理解,若有不對的地方,歡迎指正