《華納大亂鬥》名單或包括漩渦鳴人和勒布朗·詹姆斯
本博文出自: https://www.jianshu.com/p/6ebd04bc000c
一. Oauth2.0
是開放授權的一個標準,旨在讓使用者允許第三方應用去訪問使用者在某伺服器中的特定私有資源,而可以不提供其在某伺服器的賬號密碼給到第三方應用。通俗的話可以這樣去理解,假如你們公司正在開發一個 第三方應用XXX,該應用會需要在微信中分享出來一個活動頁,該活動需要讓微信使用者去參與,你們的應用需要收集到使用者的姓名,頭像,地域等資訊,那麼問題來了?你的應用如何才能拿到所有參與活動的微信使用者的基本資訊呢?
根據如上的描述,我們可以將OAuth2分為四個角色:
- Resource Owner:資源所有者 即上述中的微信使用者
- Resource Server:資源伺服器 即上述中的微信伺服器,提供微信使用者基本資訊給到第三方應用
- Client:第三方應用客戶端 即上述中你公司正在開發的第三方應用
- Authorication Server:授權伺服器 該角色可以理解為管理其餘三者關係的中間層
其具體的執行流程如下圖所示:
[圖片上傳失敗...(image-cd3d38-1589169864698)]
1.1 OAuth2的四種授權方式
1.1.1 授權碼(authorization-code)
這種方式是最常用的流程,安全性也最高,它適用於那些有後端的 Web 應用。授權碼通過前端傳送,令牌則是儲存在後端,而且所有與資源伺服器的通訊都在後端完成。這樣的前後端分離,可以避免令牌洩漏。
<font color="red">第一步</font>,A 網站提供一個連結,使用者點選後就會跳轉到 B 網站,授權使用者資料給 A 網站使用。下面就是 A 網站跳轉 B 網站的一個示意連結。
https://b.com/oauth/authorize?
response_type=code&
client_id=CLIENT_ID&
redirect_uri=CALLBACK_URL
上面 URL 中,response_type
引數表示要求返回授權碼(code
),client_id
引數讓 B 知道是誰在請求,redirect_uri
引數是 B 接受或拒絕請求後的跳轉網址,scope
<font color="red">第二步</font>,使用者跳轉後,B 網站會要求使用者登入,然後詢問是否同意給予 A 網站授權。使用者表示同意,這時 B 網站就會跳回redirect_uri
引數指定的網址。跳轉時,會傳回一個授權碼,就像下面這樣。
https://a.com/callback?code=AUTHORIZATION_CODE
<font color="red">第三步</font>,A 網站拿到授權碼以後,就可以在後端,向 B 網站請求令牌。
https://b.com/oauth/token? client_id=CLIENT_ID& client_secret=CLIENT_SECRET& grant_type=authorization_code& code=AUTHORIZATION_CODE& redirect_uri=CALLBACK_URL
上面 URL 中,client_id
引數和client_secret
引數用來讓 B 確認 A 的身份(client_secret
引數是保密的,因此只能在後端發請求),grant_type
引數的值是AUTHORIZATION_CODE
,表示採用的授權方式是授權碼,code
引數是上一步拿到的授權碼,redirect_uri
引數是令牌頒發後的回撥網址。
<font color="red">第四步</font>,B 網站收到請求以後,就會頒發令牌。具體做法是向redirect_uri
指定的網址,傳送一段 JSON 資料。
{ "access_token":"ACCESS_TOKEN", "token_type":"bearer", "expires_in":2592000, "refresh_token":"REFRESH_TOKEN", "scope":"read", "uid":100101, "info":{...} }
上面 JSON 資料中,access_token
欄位就是令牌,A 網站在後端拿到了。
作者:LANSHENGYANG
連結:https://www.jianshu.com/p/6ebd04bc000c
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。