本文介紹Web應用如何通過OAuth 2.0扮演登入使用者訪問阿里雲API。
前提條件
基本流程

-
使用者通過瀏覽器登入Web應用。
-
Web應用重新導向到阿里雲OAuth 2.0服務並將URL返回給瀏覽器。
說明如果使用者還未登入,則會進一步重新導向到阿里雲登入服務。
-
使用者通過瀏覽器登入阿里雲OAuth 2.0服務並申請授權碼。
-
阿里雲OAuth 2.0服務重新導向到Web應用並返回授權碼給瀏覽器。
-
瀏覽器通過Web應用使用授權碼向阿里雲OAuth 2.0服務申請代表使用者身份的令牌。
-
阿里雲OAuth 2.0服務向Web應用返回存取權杖(access_token)。
-
Web應用通過擷取的存取權杖(access_token)向阿里雲發起訪問API的請求。
說明由於存取權杖(access_token)可以代表使用者身份,因此應用可以訪問目前使用者的資源。
擷取存取權杖
步驟一:Web應用通過瀏覽器將使用者重新導向到阿里雲OAuth 2.0服務從而擷取授權碼
授權碼的請求地址:https://signin.alibabacloud.com/oauth2/v1/auth。
請求參數:
|
參數名稱 |
是否必選 |
描述 |
|
client_id |
是 |
應用ID。 |
|
redirect_uri |
是 |
建立應用時填寫的重新導向URL之一。 |
|
response_type |
是 |
傳回型別。根據OAuth 2.0協議,目前支援設定此參數的取值為code。 |
|
scope |
否 |
空格分隔的OAuth範圍列表。如不指定此參數取值,則預設為應用的全部OAuth範圍。 |
|
access_type |
否 |
應用的訪問類型。取值分為兩種類型:
預設取值為online。 |
|
state |
否 |
應用通過state 參數實現多種目的,例如:狀態保持、作為nonce使用從而減少CSRF威脅等。state如果設定為任一字元串,阿里雲OAuth2.0服務會將請求中的state參數及取值原樣放到返回參數中以供後續使用。 |
|
prompt |
否 |
該參數用於指定伺服器是否需要提示使用者進行授權操作。 如果指定,會強制要求使用者進行授權,即使該阿里雲帳號已經做過授權,也需要重新授權。如果不指定,則只在該阿里雲帳號第一次使用該應用時要求授權。 取值: |
請求樣本:
https://signin.alibabacloud.com/oauth2/v1/auth?
client_id=123****&
redirect_uri=https://example.com/authcallback/&
response_type=code&
scope=openid /acs/ccc&
access_type=offline&
state=123456****
返回參數:
|
參數名稱 |
描述 |
|
code |
授權碼。 |
|
state |
請求參數中state的值。 |
返回樣本:
GET HTTP/1.1 302 Found
Location: https://example.com/authcallback/?code=ABAFDGDFXYZW888&state=123456****
步驟二:Web應用使用授權碼向阿里雲OAuth 2.0服務申請代表使用者身份的令牌
換取存取權杖的請求地址:https://oauth.alibabacloud.com/v1/token。
請求參數:
|
參數名稱 |
是否必選 |
描述 |
|
code |
是 |
授權碼。 該授權碼從步驟一的返回結果中擷取。 |
|
client_id |
是 |
應用ID。 |
|
redirect_uri |
是 |
重新導向URL。 該URL需要與步驟一請求參數中填寫的保持一致。 |
|
grant_type |
是 |
根據OAuth 2.0協議, 取值為authorization_code。 |
|
client_secret |
是 |
應用密鑰,用作換取存取權杖時評鑑應用身份的密碼。 |
請求樣本:
POST /v1/token HTTP/1.1
Host: oauth.alibabacloud.com
Content-Type: application/x-www-form-urlencoded
code=ABAFDGDFXYZW888&
client_id=123****&
client_secret=`your_client_secret`&
redirect_uri=https://example.com/authcallback/&
grant_type=authorization_code
返回參數:
|
參數名稱 |
描述 |
|
access_token |
存取權杖。 存取權杖可以代表使用者身份,應用使用此存取權杖來訪問阿里雲API。應用不需要理解存取權杖的含義,直接使用即可。 |
|
expires_in |
存取權杖的剩餘有效時間,單位為秒。 |
|
token_type |
存取權杖的類型。取值為Bearer。 |
|
id_token |
身份令牌。 身份令牌為OAuth簽名的JWT(JSON Web Token)。如果初始請求的scope參數包含了openid,則返回身份令牌。 |
|
refresh_token |
重新整理權杖。 如果初始請求時應用的訪問類型為offline,則返回重新整理權杖。 |
|
scope |
擷取的授權碼的實際授權範圍。 如果應用需要的授權範圍不止 如果您安裝的應用未授權指定的scope,請您重新授權。重新授權的方法:通過步驟一 |
返回樣本:
{
"access_token": "eyJraWQiOiJrMTIzNCIsImVu****",
"token_type": "Bearer",
"expires_in": "3600",
"refresh_token": "Ccx63VVeTn2dxV7ovXXfLtAqLLERA****",
"id_token": "eyJhbGciOiJIUzI1****",
"scope": "openid /acs/ccc"
}
擷取新的存取權杖
換取存取權杖的請求地址:https://oauth.alibabacloud.com/v1/token。
請求參數:
|
參數名稱 |
是否必選 |
描述 |
|
refresh_token |
是 |
用授權碼換取存取權杖時獲得的重新整理權杖。 |
|
client_id |
是 |
應用ID。 |
|
grant_type |
是 |
根據OAuth 2.0協議, 取值為refresh_token。 |
|
client_secret |
否 |
應用密鑰,用作換取存取權杖時評鑑應用身份的密碼。 |
請求樣本:
POST /v1/token HTTP/1.1
Host: oauth.alibabacloud.com
Content-Type: application/x-www-form-urlencoded
refresh_token=Ccx63VVeTn2dxV7ovXXfLtAqLLERAH1Bc&
client_id=123****&
client_secret=`your_client_secret`&
grant_type=refresh_token
返回參數:
|
參數名稱 |
描述 |
|
access_token |
新的存取權杖。應用可以使用新的存取權杖來訪問阿里雲API。 |
|
expires_in |
存取權杖的剩餘有效時間,單位為秒。 |
|
token_type |
存取權杖的類型。取值為Bearer。 |
返回樣本:
{
"access_token": "eyJraWQiOiJrMTIzNCIsImVu****",
"token_type": "Bearer",
"expires_in": "3600"
}
撤銷重新整理權杖
Web應用擷取了重新整理權杖後,在使用者退出登入應用或使用者將自己的帳號從應用中移除時,必須撤銷重新整理權杖。
撤銷重新整理權杖的請求地址:https://oauth.alibabacloud.com/v1/revoke。
請求參數:
|
參數名稱 |
是否必選 |
描述 |
|
token |
是 |
需要撤銷的重新整理權杖。 |
|
client_id |
是 |
應用ID。 |
|
client_secret |
否 |
應用密鑰。 |