在學習其他應用場景前,需要瞭解幾個客戶端的授權模式。首先瞭解下本節使用的幾個名詞 Resource Owner:資源擁有者,文中稱“user”; Client為第三方客戶端; Authorization server為授權伺服器; redirection URI:簡單理解為取數據的地址; User ...
在學習其他應用場景前,需要瞭解幾個客戶端的授權模式。首先瞭解下本節使用的幾個名詞
Resource Owner:資源擁有者,文中稱“user”;
Client為第三方客戶端;
Authorization server為授權伺服器;
redirection URI:簡單理解為取數據的地址;
User Agent:用戶代理,本文中就是指瀏覽器;
這裡把訪問資源伺服器簡單理解成取數據。
Resource Owner Password Credentials模式
下麵以我自己的理解加上對話的形式來簡要說明。
User:Client,這是我的redirection URI,user ID和Password,你去幫我拿些數據吧。
Client:好的,沒問題!(轉向Authorization server)Authorization server,這是user的user ID和Password,我要去拿user需要的數據。
Authorization server:給的user ID和Password正確,給你access token和refresh token,去拿數據吧。
authorization code模式
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,你去拿數據吧。
Implicit模式
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模式:
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
以上是個人對客戶端的授權模式的理解,如有不對的地方,歡迎指正