全部產品
Search
文件中心

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

更新時間:Feb 05, 2024

本文介紹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)可以代表使用者身份,因此應用可以訪問目前使用者的資源。

擷取存取權杖

  1. Web應用通過瀏覽器將使用者重新導向到阿里雲OAuth 2.0服務從而擷取授權碼。

    授權碼的請求地址:https://signin.alibabacloud.com/oauth2/v1/auth

    表 1. 請求參數

    參數名稱

    是否必選

    描述

    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****

    返回樣本

    GET HTTP/1.1 302 Found
    Location: https://example.com/authcallback/?code=ABAFDGDFXYZW888&state=123456****
  2. Web應用使用授權碼向阿里雲OAuth 2.0服務申請代表使用者身份的令牌。

    換取存取權杖的請求地址:https://oauth.alibabacloud.com/v1/token

    表 2. 請求參數

    參數名稱

    是否必選

    描述

    code

    初始請求中擷取的授權碼。

    client_id

    應用ID。

    redirect_uri

    初始請求中設定的參數。

    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
    表 3. 返回參數

    參數名稱

    描述

    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

表 4. 請求參數

參數名稱

是否必選

描述

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
表 5. 返回參數

參數名稱

描述

access_token

新的存取權杖。應用可以使用新的存取權杖來訪問阿里雲API。

expires_in

存取權杖的剩餘有效時間,單位為秒。

token_type

存取權杖的類型。取值為Bearer

返回樣本

{
  "access_token": "eyJraWQiOiJrMTIzNCIsImVu****",
  "token_type": "Bearer",
  "expires_in": "3600"
}

撤銷重新整理權杖

Web應用擷取了重新整理權杖後,在使用者退出登入應用或使用者將自己的帳號從應用中移除時,必須撤銷重新整理權杖。

撤銷重新整理權杖的請求地址:https://oauth.alibabacloud.com/v1/revoke

表 6. 請求參數

參數名稱

是否必選

描述

token

需要撤銷的重新整理權杖。

client_id

應用ID。

client_secret

應用密鑰。