OAuth 2.0api
OAuth 2.0是行業標準的受權協議,爲Web應用程序,桌面應用程序,移動電話和客廳設備提供特定的受權流程。
OAuth 2.0受權框架支持第三方,應用程序以獲取對HTTP服務的有限訪問權限,表明資源全部者經過編排批准交互,資源全部者和HTTP服務之間,或經過容許,第三方應用程序以表明本身獲取訪問權限。
OAuth 2.0受權類型
受權碼(Authorization Code) 機密和公共客戶端使用受權代碼受權類型來交換訪問令牌的受權代碼
包含兩步1獲取受權碼;2獲取交換令牌;
獲取受權碼
ps :https://authorization-server.com/auth?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=photos&state=1234zyx
response_type = code - 表示您的服務器但願收到受權代碼
client_id - 首次建立應用程序時收到的客戶端ID
redirect_uri - 表示受權完成後返回用戶的URI
範圍 - 一個或多個範圍值,指示您要訪問的用戶賬戶的哪些部分
state - 由您的應用程序生成的隨機字符串,稍後您將驗證該字符串
若是用戶單擊「容許」,則服務會使用身份驗證代碼將用戶重定向回您的站點瀏覽器
https://example-app.com/cb?code=AUTH_CODE_HERE&state=1234zyx
code - 服務器返回查詢字符串中的受權代碼
state - 服務器返回您傳遞的相同狀態值
您應首先比較此狀態值以確保它與您開始時的狀態匹配。您一般能夠將狀態值存儲在cookie或會話中,並在用戶返回時進行比較。這可確保您的重定向端點沒法欺騙嘗試交換任意受權代碼。
獲取交換令牌
請求參數
grant_type = authorization_code - 此流的受權類型是authorization_code
code = AUTH_CODE_HERE - 這是您在查詢字符串中收到的代碼
redirect_uri = REDIRECT_URI - 必須與原始連接中提供的重定向URI相同
client_id = CLIENT_ID - 首次建立應用程序時收到的客戶端ID
client_secret = CLIENT_SECRET - 因爲此請求是從服務器端代碼發出的,所以包含了密碼
隱式受權(Implicit)隱式受權類型是公共客戶端可使用的簡化流,其中訪問令牌當即返回,無需額外的受權代碼交換步驟。一般不建議使用隱式流(而且一些服務器徹底禁止此流程)
密碼授予(Password) 可用於直接交換訪問令牌的用戶名和密碼
ps : POST https://api.authorization-server.com/token
grant_type=password&
username=USERNAME&
password=PASSWORD&
client_id=CLIENT_ID
&client_secret=xxxxxxxxxx
grant_type = password - 此流的受權類型爲password
username = USERNAME - 應用程序收集的用戶的用戶名
password = PASSWORD - 應用程序收集的用戶密碼
client_id = CLIENT_ID - 首次建立應用程序時收到的客戶端ID
客戶端憑據(Client Credentials) 當應用程序請求訪問令牌訪問其本身的資源而不是表明用戶訪問時,將使用客戶端憑據授予
ps: POST https://api.authorization-server.com/token
grant_type=client_credentials&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET
grant_type=client_credentials grant_type參數必須設置爲client_credentials
client_id=xxxxxxxxxx
client_secret=xxxxxxxxxx
設備代碼 (Device Code) 設備代碼受權類型由設備流中的無瀏覽器或輸入受限設備使用,以交換先前得到的訪問令牌的設備代碼。
刷新令牌 (Refresh Token) 當訪問令牌過時時,客戶端使用刷新令牌受權類型來交換訪問令牌的刷新令牌
grant_type=refresh_token
refresh_token=xxxxxxxxxxx 獲取access_token時發佈給客戶端的刷新令牌
client_id=xxxxxxxxxx
client_secret=xxxxxxxxxx
正常返回響應格式
{
"access_token":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"IwOGYzYTlmM2YxOTQ5MGE3YmNmMDFkNTVk",
"scope":"create"
}
錯誤時的響應
{
"error": "invalid_request",
"error_description": "Request was missing the 'redirect_uri' parameter.",
"error_uri": "See the full API docs at https://authorization-server.com/docs/access_token"
}服務器