OAuth2.0說明文檔


OAuth2.0說明文檔

1OAuth 2.0 簡介

OAuth為應用提供了一種訪問受保護資源的方法。在應用訪問受保護資源之前,它必須先從資源擁有者處獲取授權(訪問許可),然后用訪問許可交換訪問令牌(代表許可的作用域、持續時間和其它屬性)。應用通過向資源服務器出示訪問令牌來訪問受保護資源。

 

下圖中的名詞說明

Resource Owner:用戶

User-Agent:瀏覽器

Client應用服務器

Authorization Server:認證服務器(用戶信息存放服務的認證服務器)

Resource Server:資源服務器(用戶真正信息存放的服務器,需要通過access_token進行訪問)

Web-Hosted Client Resource:web托管的客戶端資源(這個確切的說,我也不知道叫啥才適合)

 

OAuth2.0服務支持以下5種獲取Access Token的方式:(圖片來源:OAuth2.0協議草案 )

1.1APP密鑰模式(Client Credentials Flow)

直接使用app密鑰,不另作說明

 

 

1.2Resource Owner Password Credentials Flow

直接使用用戶密碼,不另作說明

 

 

1.3Authorization Code Flow

授權碼模式

 

流程簡單表述為,當用戶訪問應用服務器

(A)應用服務器返回帶有授權信息的重定向鏈接,瀏覽器拿到鏈接,轉為訪問認證服務器(見下面:獲取Authorization Code)

(B)認證服務器提供界面給用戶進行確認授權,用戶確認授權

(C)用戶確認授權后,認證服務器返回帶有code的重定向鏈接,瀏覽器拿到鏈接,轉為訪問應用服務器

(D)應用服務器拿到code,訪問認證服務器(見下面:通過Authorization Code獲取Access Token

(E)認證服務器驗證后,返回access_token給應用服務器

授權碼是應用彈出窗口,並將用戶引導到授權服務器,傳入標識符、請求作用域、本地狀態,和一個重定向URI。授權服務器驗證用戶,獲得授權,然后用重定向URI引導回應用,並傳回授權碼給應用。因為終端用戶只在授權服務器上進行驗證,所以終端用戶的用戶名和密碼從來不用分享給應用。

 

獲取Authorization Code

參數名

必選

介紹

client_id

True

創建應用時獲得的App Key

response_type

True

此值固定為“code”

redirect_uri

True

授權后要回調的URI,即接收Authorization Code的URI, 其值可以是“oob”。 非“oob”值的redirect_uri所在域名必須與開發者注冊應用時所提供的回調地址的域名相匹配

scope

False

以空格分隔的權限列表,若不傳遞此參數,代表請求默認的basic權限。(目前只有basic權限)

state

False

hash,用於預防CSRF,用於保持請求和回調的狀態,授權服務器在重定向到“redirect_uri”時,會在Query Parameter中原樣回傳該參數

/authorize?client_id=ABCDEFGHIJKLMNOP&response_type=code&redirect_uri=http://www.example.com/oauth_redirect&scope=basic&state=mytest

如果用戶在此頁面同意授權,則將重定向用戶瀏覽器到指定的“redirect_uri”,並附帶上表示授權服務所分配的Authorization Code的code參數(假設為“0987654321“),以及state參數(如果有),驗證通過后,認證服務器將重定向用戶瀏覽器到“http://www.example.com/oauth_redirect?state=mytest&code=0987654321”

說明:每一個Authorization Code的有效期為60秒(可根據需求調長一些,但原則上應盡可能短),並且只能使用一次,再次使用將無效。

 

通過Authorization Code獲取Access Token

通過上面第一步獲得Authorization Code后,便可以用其向認證服務器換取一個Access Token。

參數名

必選

介紹

grant_type

True

此值固定為“authorization_code”

code

True

通過上面第一步所獲得的Authorization Code

client_id

True

創建應用時獲得的App Key

client_secret

True

應用的App Secret

redirect_uri

True

redirect_uri所在域名必須與開發者注冊應用時所提供的回調地址的域名匹配

/access_token?grant_type=authorization_code&code=0987654321&client_id=ABCDEFGHIJKLMNOP&client_secret=abcdefg...&redirect_uri=http://www.example.com/oauth_redirect

 

若參數無誤,服務器將返回一段JSON文本,包含以下參數:

參數名

必選

介紹

access_token

True

獲取的Access Token

token_type

False

令牌類型“bearer”或“mac”,暫無很明確的說明,通常是brearer或省略

expires_in

True

Access Token的有效期,以秒為單位

refresh_token

False

用於刷新Access Token 的 Refresh Token

scope

False

Access Token最終的訪問范圍,即用戶實際授予的權限列表,用戶在授權頁面時,有可能會取消掉某些請求的權限,通常只作或只有登錄認證的話,可忽略

示例:Content-Type: application/json

{"access_token":"uuvvwwxxyyzz","expires_in":"3600", "scope":"basic","refresh_token":"qwertyuiop"}

 

1.4Implicit Grant Flow

簡化模式,該模式下,通常client和user-agent是在一起的,如手機app等

 

流程簡單表述為,當用戶訪問應用服務

(A)應用服務返回帶有授權信息的重定向鏈接,瀏覽器拿到鏈接,轉為訪問認證服務器

(B)認證服務器提供界面給用戶進行確認授權,用戶確認授權

(C)假設資源所有者授予訪問權限,則認證服務器返回帶有獲取access_token的令牌的鏈接

(D)瀏覽器鏈接重定向到一個web客戶端資源,訪問資源服務器

(E)返回一個網頁(通常是一個嵌入式腳本的HTML文檔)

(F)瀏覽器從腳本中提取access_token(包括其他參數)

(G)瀏覽器帶着access_token重定向到應用服務器,應用服務器到瀏覽器傳來的access_token

采用Implicit Grant方式獲取Access Token的授權驗證流程又被稱為User-Agent Flow,適用於所有無Server端配合的應用(由於應用往往位於一個User Agent里,如瀏覽器里面,因此這類應用在某些平台下又被稱為Client-Side Application),如手機/桌面客戶端程序、瀏覽器插件等,以及基於JavaScript等腳本語言實現的應用。

 

1.5Refreshing an Expired Access Token

令牌刷新方式,適用於所有有Server端配合的應用,其實就是更新access_token

 

獲取Access Token,都會拿到有效期為14天的Refresh Token,和2分鍾有效期的Access Token。對於這些應用,只要用戶在14天內登錄,應用就可以使用Refresh Token獲得新的Access Token。

 

要使用Refresh Token獲得新的Access Token,需要應用在其服務端發送請求(推薦用POST方法)到開放平台OAuth2.0授權服務的以下地址: “/access_token”,並帶上以下參數:

參數名

必選

介紹

grant_type

True

必須為“refresh_token”

refresh_token

True

用於刷新Access Token用的Refresh Token

client_id

True

創建應用時獲得的App Key

client_secret

True

應用的App Secret

scope

False

以空格分隔的權限列表,若不傳遞此參數,代表請求默認的basic權限。注:通過Refresh Token刷新Access Token時所要求的scope權限范圍必須小於等於上次獲取Access Token時授予的權限范圍

示例:

/access_token?grant_type=refresh_token&refresh_token=qwertyuiop&client_id=ABCDEFGHIJKLMNOP&client_secret=abcdefg...&scope=basic

若請求成功服務器將返回一段JSON文本,包含以下參數

示例:Content-Type: application/json

{ "access_token":"uuvvwwxxyyzz","expires_in":"120","scope":"basic","refresh_token":" qwertyuiop"}

 

2、使用access_token調用API

獲取access_token以后,就可以使用access_token調用API接口。

調用API的URL“/json”傳遞需要的參數,參數的詳細介紹請參照以上描述

例:/json?access_token=uuvvwwxxyyzz

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM