このトピックでは、Web アプリケーションが OAuth 2.0 認可コードフローを使用して、ユーザーに代わって Alibaba Cloud API にアクセスする方法について説明します。
前提条件
-
Web アプリケーションがユーザーに代わって Alibaba Cloud API にアクセスする前に、アプリケーションを作成する必要があります。名前、OAuth スコープ、リダイレクト URI などのキー情報を提供します。詳細については、「アプリケーションの作成」をご参照ください。アプリケーションを作成した後、そのクライアント ID を確認できます。[Enterprise Applications] ページで、アプリケーションリストからお使いのアプリケーションの クライアント ID を見つけます。
説明アプリケーションを作成すると、そのアプリケーションは Alibaba Cloud アカウント内のユーザーに代わって動作できるようになります。他の Alibaba Cloud アカウントのユーザーに代わって動作するには、それらのアカウントから認可を取得する必要があります。
-
クライアントシークレットを作成します。詳細については、「クライアントシークレットの作成」をご参照ください。クライアントシークレット (
client_secret) は作成時にのみ表示され、後で取得することはできません。安全に保管してください。
認可フローの概要

-
ユーザーがブラウザで Web アプリケーションにサインインします。
-
Web アプリケーションは、ユーザーを Alibaba Cloud OAuth 2.0 認可エンドポイントにリダイレクトします。
説明ユーザーが Alibaba Cloud にサインインしていない場合、最初に Alibaba Cloud のサインインページにリダイレクトされます。
-
ユーザーはサインインし、同意画面でアプリケーションを認可します。
-
Alibaba Cloud OAuth 2.0 サービスは、認可コードとともにユーザーを Web アプリケーションにリダイレクトします。
-
Web アプリケーションは、認可コードをアクセストークンと交換します。
-
アクセストークンを取得するには、「アクセストークンの取得」をご参照ください。
-
アクセストークンを更新するには、「アクセストークンの更新」をご参照ください。
-
更新トークンを取り消すには、「更新トークンの取り消し」をご参照ください。
-
-
Alibaba Cloud OAuth 2.0 サービスは、アクセストークン (
access_token) を Web アプリケーションに返します。 -
Web アプリケーションは、アクセストークンを使用して、ユーザーに代わって Alibaba Cloud API を呼び出します。
説明アクセストークンはユーザーを表すため、アプリケーションはユーザーのリソースにアクセスできます。
アクセストークンの取得
ステップ 1:認可コードのリクエスト
認可エンドポイント: https://signin.alibabacloud.com/oauth2/v1/auth。
リクエストパラメーター:
|
パラメーター |
必須 |
説明 |
|
client_id |
はい |
アプリケーションのクライアント ID。 |
|
redirect_uri |
はい |
アプリケーション作成時に指定したリダイレクト URI のいずれか。 |
|
response_type |
はい |
レスポンスタイプ。OAuth 2.0 プロトコルに従い、この値は |
|
scope |
いいえ |
スペースで区切られた OAuth スコープのリスト。このパラメーターを省略した場合、リクエストでは、デフォルトでアプリケーションに設定されたすべてのスコープが使用されます。 |
|
access_type |
いいえ |
リクエストされたアクセスの種類。有効な値:
デフォルト値: online。 |
|
state |
いいえ |
アプリケーションは、state パラメーターを、状態の維持や CSRF リスクを軽減するための nonce として利用するなど、複数の目的で使用できます。state パラメーターを任意の文字列に設定すると、Alibaba Cloud OAuth 2.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****
ステップ 2:コードとアクセストークンの交換
トークンエンドポイント: https://oauth.alibabacloud.com/v1/token。
リクエストパラメーター:
|
パラメーター |
必須 |
説明 |
|
code |
はい |
認可コード。 ステップ 1 で受け取った認可コード。 |
|
client_id |
はい |
アプリケーションのクライアント ID。 |
|
redirect_uri |
はい |
リダイレクト URI。 この URI は、ステップ 1 の認可リクエストで指定された値と一致する必要があります。 |
|
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 |
ユーザーに代わって Alibaba Cloud API へのアクセスを許可するトークン。アプリケーションはこのトークンをパースするべきではありません。API コールでそのまま渡してください。 アクセストークンはユーザーのアイデンティティを表し、アプリケーションはこのトークンを使用して Alibaba Cloud API にアクセスします。アプリケーションはトークンの意味を理解する必要はなく、直接使用できます。 |
|
expires_in |
アクセストークンの有効期間 (秒単位)。 |
|
token_type |
アクセストークンのタイプ。値は常に Bearer です。 |
|
id_token |
ID トークン。 ユーザーのアイデンティティ情報を含む JWT (JSON Web Token) です。このトークンは、最初の認可リクエストの |
|
refresh_token |
更新トークン。 このトークンは、最初の認可リクエストの |
|
scope |
アクセストークンに付与されたスコープのスペース区切りリスト。 アプリケーションが アプリケーションに必要な scope が付与されていない場合は、再度認可をリクエストする必要があります。これを行うには、ステップ 1 で説明されているように、 |
レスポンス例:
{
"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 |
新しいアクセストークン。 |
|
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 |
いいえ |
アプリケーションのクライアントシークレット。 |