包括:
一. OAuth 概念
二. OAuth 運行流程
三. OAuth 授權模式
一. OAuth 概念
OAuth 是一個開放標準,允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯繫人列表),而不需要將用戶名和密碼提供給第三方應用。OAuth允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。每一個令牌授權一個特定的網站在特定的時段內訪問特定的資源。這樣,OAuth讓用戶可以授權第三方網站訪問他們存儲在另外服務提供者的某些特定信息,而非所有內容。
二.OAuth 運行流程
首先會有幾個術語:
- Resource owner : 資源所有者,本文中稱爲 “用戶”。
- Authorization server :認證服務器,即服務提供商專門用來處理認證的服務器。
- Resource server:資源服務器,即用戶提供商存放用戶生成的資源的服務器。它和認證服務器,可以是同一臺服務器,也可以是不同的服務器。
- A 用戶打開客戶端以後,客戶端要求用戶給予授權。
- B 用戶同意給予客戶端授權。
- C 客戶端使用上一步獲得的授權,向認證服務器申請令牌。
- D 認證服務器對客戶端進行認證後,確認無誤後,同意發放令牌。
- E 客戶端使用令牌,向資源服務器申請獲取資源。
- F 資源服務器確認令牌無誤後,同意向客戶端開放資源。
- 授權碼模式
- 簡化模式
- 密碼模式
- 客戶端模式
https://www.example.com/v1/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read
- www.example.com/v1/oauth/authorize :API 授權的終端。
- client_id :應用程序的client ID,用於 API 識別應用程序。
- redirect_uri :獲得授權碼之後,服務提供商重定向用戶代理(比如瀏覽器)的地址。
- response_type : 表明授權類型,默認是 code。即授權碼模式。
- scope: 應用程序可以獲得的授權級別,默認值爲 read。
- state:表示客戶端的當前狀態,可以指定任意值,認證服務器會原封不動地返回這個值,用於抵禦CSRF 攻擊。
B 用戶選擇是否給予授權。如下圖3:
https://www.jianshu.com/callback?code=AUTHORIZATION_CODE
https://www.example.com/v1/oauth/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=CALLBACK_URL
URI 包括:- www.example.com/v1/oauth/authorize :API Token的終端。
- client_id :即 app key / consumer key ,用於驗證應用程序。
- client_secret:即 app secret / consumer secret 用於驗證應用程序。
- grant_type :剛剛獲得的授權碼
- redirect_uri :重定向URI,和第一步一致。
E 認證服務器覈對了授權碼 和 重定向 URI 確認無誤後,向客戶端發送訪問令牌和 更新令牌。
{"access_token":"ACCESS_TOKEN","token_type":"bearer","expires_in":2592000,"refresh_token":"REFRESH_TOKEN","scope":"read"}
包括了:
- access_token:訪問令牌
- token_type :令牌類型
- expires_in :過期時間,單位爲秒
- refresh_token: 更新令牌,用來獲取下一次的訪問令牌。
- scope:權限範圍。
https://www.example.com/authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read
https://www.example.com/callback#token=ACCESS_TOKEN