本文檔主要描述Web服務應用如何通過OAuth2.0介面接入網盤與相簿服務。
OAuth2.0簡介
OAuth2.0允許使用者在不告知第三方自己的帳號密碼情況下,通過授權方式讓第三方服務可以擷取自己的資源資訊。
OAuth2.0支援Authorization Code、Implicit、Resource Owner Password Credentials、Client Credentials四種授權方式,其中Authorization Code模式的安全係數最高,本文以Authorization Code的授權模式為例介紹。
OAuth2.0中的Authorization Code模式的授權流程如下圖所示。

Web 服務應用接入流程

調用流程:
使用者登入與授權
使用者訪問Web服務應用,Web服務應用將使用者重新導向到證明伺服器,使用者決定是否授權Web服務應用。
擷取Access Token
使用者授權後,證明伺服器將使用者重新導向回Web服務應用指定的重新導向URI(redirection URI),並附上授權碼(code)。
Web服務應用收到授權碼後,向證明伺服器請求令牌,擷取存取權杖(access_token)。
訪問資源
使用者使用存取權杖(access_token)通過Web應用前端訪問業務API。
前提條件
需要一個支援OAuth2.0協議能力的服務。
已開通網盤與相簿服務(開發人員版)。如果您還未開通開發人員版服務,具體操作,請參見開始使用 PDS。
操作步驟
步驟一:擷取應用的ID和Secret
進入網盤與相簿服務(開發人員版)的域列表。
找到您需要操作的域,在該域的右側列單擊詳情。
建立應用。
說明如果未建立應用,請建立應用後再進行後續操作。
進入域詳情頁面後,選擇應用列表,單擊建立應用。
輸入和選擇頁面提示內容,單擊確認。
應用的類型請選擇為WebServer(Web服務端應用)。

在應用列表中擷取目標應用ID(client_id)和 Secret(client_secret)。
重要Secret要注意保密不要泄露。
步驟二:OAuth2.0登入授權
設定Authorization參數
使用者通過瀏覽器訪問您的Web服務應用,如果使用者還沒有認證,您的Web服務應用需要構建一個 Authorization請求,這個請求會帶上您的Web服務應用的client_id和要訪問Scope等資訊,以便讓使用者向PDS Auth服務(Authorization Server)授權給您的Web服務應用。
請求樣本:
GET /v2/oauth/authorize?client_id=<ID>&redirect_uri=<redirect_uri>&login_type=<login_type>&scope=<scope>&response_type=code&state=[state] HTTP/1.1 Host: {domainId}.api.aliyunpds.com請求參數說明參見下表:
參數
是否必選
描述
client_id
是
應用
ID。擷取方式,請參見擷取應用的ID和Secret。redirect_uri
是
回調URL,指定認證服務授權後重新導向的地址,例如
https://example.com/callback。授權成功後,使用者將被重新導向至此地址並攜帶一次性驗證碼,例如
https://example.com/callback?code=xxxx。說明請確保回調URL與建立應用時提供的OAuth2.0回調URL相匹配。
scope
否
存取範圍列表,描述您的Web服務應用需要的存取權限範圍,是在建立應用時填寫的許可權範圍的子集,將在使用者同意授權頁面展示。請參見Scope說明。
說明最終擷取到的AccessToken的許可權,將是整個scope和使用者本身的許可權的交集。
response_type
是
此處固定值
code。state
否,但推薦使用
若請求攜帶此參數,證明伺服器將原樣回傳以防止CSRF攻擊,例如:
https://example.com/callback?code=xxxx&state=abc。login_type
是
登入方式選項。取值範圍如下:
default:供綜合登入頁面,包括手機號登入和其他方式。
phone:僅限手機號登入。
ding:適用於DingTalk掃碼登入。
ldap:適用於LDAP或AD域登入。
wx:適用於企業微信登入。
ram:適用於阿里雲子帳號登入。
lark:適用于飛書登入。
saml:適用於第三方帳號通過SAML協議登入。
hide_consent
否
首次登入後是否跳過使用者授權頁面。取值可選範圍如下:
true(預設):使用者將不會看到授權頁面,直接進入下一步。
false:可以看到授權頁面。
lang
否
介面展示的語言。取值範圍如下:
zh_CN(預設):簡體中文。
en_US:英文。
Consent 頁面
在此步驟中,使用者可以決定是否授權給 Web 服務應用。如果不同意授權,則流程終止。 如果同意授權,將重新導向到第一步請求中的
redirect_uri, 比如:https://example.com/callback?code=xxxx&state=abc。通過code擷取AccessToken
Web服務應用分為前端和後端兩部分。前端需配置重新導向URL
https://example.com/callback。前端在接收參數?code=xxx後,應解析出code並將其傳遞給後端。後端通過以下介面擷取AccessToken,並回傳給前端。請求樣本:
POST /v2/oauth/token HTTP/1.1 Host: {domainId}.api.aliyunpds.com Content-Type: application/x-www-form-urlencoded code=xxx\ &client_id=your_app_id\ &client_secret=your_app_secret\ &redirect_uri=https://example.com/callback\ &grant_type=authorization_code參數
是否必選
描述
code
是
一次性
code,使用過一次後即失效。client_id
是
應用
ID。擷取方式,請參見擷取應用的ID和Secret。client_secret
是
建立應用時產生的
secret。redirect_uri
是
回調URL,指定認證服務授權後重新導向的地址,例如
https://example.com/callback。說明請確保回調URL與建立應用時提供的OAuth2.0回調URL相匹配。
grant_type
是
授與類型。固定值為
authorization_code,表示使用授權碼授權方式。返回:
HTTP/1.1 200 OK Content-Type: application/json { "access_token":"Aiasd76*****", "expires_time":"2019-11-11T10:10:10.009Z", "expire_in": 7200, "token_type":"Bearer", "refresh_token":"LSLKdk*******" }參數
位置
類型
是否必選
描述
access_token
body
string
是
產生的
access_token,有效期間2小時。refresh_token
body
string
是
用來重新整理
access_token,有效期間比較長,一般為7天。expires_time
body
string
是
access_token的失效時間。expire_in
body
long
是
access_token的有效期間,預設:7200,單位:秒。token_type
body
string
是
token類型。固定值為
Bearer。調用PDS服務API
Web前端可以直接使用
access_token調用PDS API。只需在要求標頭的Authorization中帶上access_token。調用方式,請參見調用方式。
重新整理AccessToken
請求樣本:
POST /v2/oauth/token HTTP/1.1
Host: {domainId}.api.aliyunpds.com
Content-Type: application/x-www-form-urlencoded
refresh_token=xxx\
&client_id=xxx\
&client_secret=xxx\
&grant_type=refresh_token請求參數說明參見下表:
參數名稱 | 是否必選 | 描述 |
refresh_token | 是 | 用授權碼換取存取權杖時獲得的重新整理權杖。 |
client_id | 是 | 應用 |
grant_type | 是 | 固定值為 |
client_secret | 是 | 應用的密鑰,用作擷取存取權杖時評鑑應用身份的密碼。 |
返回:
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token":"xxxxxxxxx",
"refresh_token": "xxxxx",
"expires_in":7200,
"expire_time":"2019-11-11T10:10:10.009Z",
"token_type":"Bearer"
}名稱 | 位置 | 類型 | 必選 | 說明 |
access_token | body | string | 是 | 產生的 |
refresh_token | body | string | 是 | 用來重新整理 |
expires_time | body | string | 是 |
|
expire_in | body | long | 是 |
|
token_type | body | string | 是 | token類型。固定值為 |
常見問題
相關文檔
網盤與相簿服務(開發人員版) API調用相關資訊。請參考調用方式文檔。
如需將移動端和案頭端通過OAuth2.0介面接入到網盤與相簿服務,請參考移動端和案頭端應用的OAuth2.0接入流程文檔進行操作。
如需將Web瀏覽器應用通過OAuth2.0介面接入到網盤與相簿服務,請參考Web瀏覽器應用的OAuth2.0接入流程文檔進行操作。