全部產品
Search
文件中心

Resource Access Management:Web應用登入阿里雲

更新時間:Dec 02, 2025

本文介紹Web應用如何通過OAuth 2.0扮演登入使用者訪問阿里雲API。

前提條件

  • Web應用扮演登入使用者訪問阿里雲首先需要建立應用,為應用提供恰當的名稱、OAuth範圍、回調地址等關鍵資訊,詳情請參見建立應用。應用建立成功後,您可以在應用列表中查看應用ID(client_id),如下圖所示。應用ID

    說明

    應用建立成功之後,可以在阿里雲帳號內直接扮演使用者。如果要扮演其他阿里雲帳號的使用者,需要獲得其他阿里雲帳號的授權。

  • 建立應用密鑰,詳情請參見建立應用密鑰。應用密鑰(client_secret)只在建立時顯示,不支援查詢,請妥善保管。

基本流程

基本流程

  1. 使用者通過瀏覽器登入Web應用。

  2. Web應用重新導向到阿里雲OAuth 2.0服務並將URL返回給瀏覽器。

    說明

    如果使用者還未登入,則會進一步重新導向到阿里雲登入服務。

  3. 使用者通過瀏覽器登入阿里雲OAuth 2.0服務並申請授權碼。

  4. 阿里雲OAuth 2.0服務重新導向到Web應用並返回授權碼給瀏覽器。

  5. 瀏覽器通過Web應用使用授權碼向阿里雲OAuth 2.0服務申請代表使用者身份的令牌。

  6. 阿里雲OAuth 2.0服務向Web應用返回存取權杖(access_token)。

  7. 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:應用不需要離線重新整理存取權杖。

  • offline:針對離線訪問類型的請求,會發放重新整理權杖,應用可以根據需求持續重新整理存取權杖。

預設取值為online

state

應用通過state 參數實現多種目的,例如:狀態保持、作為nonce使用從而減少CSRF威脅等。state如果設定為任一字元串,阿里雲OAuth2.0服務會將請求中的state參數及取值原樣放到返回參數中以供後續使用。

prompt

該參數用於指定伺服器是否需要提示使用者進行授權操作。

如果指定,會強制要求使用者進行授權,即使該阿里雲帳號已經做過授權,也需要重新授權。如果不指定,則只在該阿里雲帳號第一次使用該應用時要求授權。

取值:admin_consent,表示服務端會在向用戶端返回資訊之前展示授權頁面。

請求樣本:

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

擷取的授權碼的實際授權範圍。

如果應用需要的授權範圍不止openid,那麼您需要校正擷取的scope是否符合預期。

如果您安裝的應用未授權指定的scope,請您重新授權。重新授權的方法:通過步驟一https://signin.alibabacloud.com/oauth2/v1/auth請求授權碼時,設定參數prompt=admin_consent

返回樣本:

{
  "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

應用密鑰。