すべてのプロダクト
Search
ドキュメントセンター

Resource Access Management:ネイティブアプリから Alibaba Cloud API にアクセスする

最終更新日:Mar 26, 2026

本トピックでは、Proof Key for Code Exchange(PKCE)を用いた OAuth 2.0 認証コードフローを使用して、デスクトップアプリやモバイルアプリなどのネイティブアプリが、ユーザーに代わって Alibaba Cloud API に安全にアクセスできるようにする方法について説明します。

前提条件

権限付与フローの概要

PKCE を用いた認証コードフローは、ネイティブアプリに対して推奨され、最もセキュアな方法です。この手法は、認証コードの盗聴攻撃を防止するための追加セキュリティレイヤーを提供します。

  1. code_verifier および code_challenge の生成:ネイティブアプリが高エントロピーのランダム文字列(code_verifier)と、その変換後の文字列(code_challenge)を生成します。

  2. ユーザーによるログイン開始:アプリケーションがブラウザを開き、Alibaba Cloud 権限付与エンドポイントへ移動し、code_challenge およびその変換方式を渡します。

  3. ユーザーによる同意の付与:ユーザーが Alibaba Cloud アカウントにログインし、アプリケーションが要求した権限を付与します。

  4. 認証コードの受信:権限付与サーバーが、1 回限りの使用可能な認証コードを含むリダイレクト URL へユーザーをアプリケーションの指定されたリダイレクト先へ戻します。

  5. 認証コードをトークンと交換:アプリケーションが Alibaba Cloud トークンエンドポイントへリクエストを送信し、認証コードおよび元の code_verifier をアクセストークンおよび更新トークンと交換します。サーバーは、最初のステップで受け取った code_challenge と照合するために code_verifier を検証します。

  6. 保護されたリソースへのアクセス:アプリケーションがアクセストークンを使用して、Alibaba Cloud サービスに対する承認済みの API 呼び出しを行います。

ステップ 1:PKCE を用いた認証コードのリクエスト

フローを開始するには、まずアプリケーションが PKCE パラメーターを生成し、次にユーザーを権限付与エンドポイントへリダイレクトする必要があります。

1. PKCE パラメーターの生成

まず、アプリケーションが 43 文字以上 128 文字以下の高エントロピー暗号化ランダム文字列(code_verifier)を作成・記録します。

次に、以下のいずれかの方式を用いて code_verifier を変換し、code_challenge を作成します。

変換方式

説明

plain

code_challengecode_verifier と同一です。本番環境ではこの方式は推奨されません。

S256

(推奨)code_challenge は、ASCII 形式の code_verifier 文字列の SHA-256 ハッシュを Base64-URL エンコードしたものになります。
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))

S256 を用いた例:

  • code_verifier = dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk

  • code_challenge = E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM

2. 権限付与エンドポイントへのリダイレクト

アプリケーションは、以下のパラメーターを含むシステムブラウザを開き、Alibaba Cloud 権限付与エンドポイント(https://signin.alibabacloud.com/oauth2/v1/auth)へ移動します。

パラメーター

必須

説明

client_id

はい

ご利用のネイティブアプリの ID です。

redirect_uri

はい

ユーザーが同意を付与した後にリダイレクトされる URI です。これは、ご利用のアプリケーションに登録済みの URI のいずれかと完全に一致する必要があります。

response_type

はい

code に設定する必要があります。

scope

いいえ

アプリケーションが要求する OAuth スコープをスペース区切りで並べたリストです。省略した場合、アプリケーションに設定済みのすべてのスコープが要求されます。

state

いいえ

リクエストとコールバック間の状態を維持するための不透明な値です。クロスサイトリクエストフォージェリ(CSRF)攻撃を防止するため、ランダムかつ予測不能な文字列を使用することを強く推奨します。

code_challenge_method

いいえ

使用される変換方法。有効な値: plain および S256

デフォルト値: plain

code_challenge

いいえ

生成した code_challenge 文字列です。

説明

このパラメーターを省略すると PKCE は使用されず、認証コードの盗聴攻撃に対して脆弱になります。この場合、攻撃者が認証コードを傍受してアクセストークンと交換することが可能です。

prompt

いいえ

ユーザーが以前に要求された権限を付与済みであっても、権限付与サーバーが同意画面を表示するよう強制するには、このパラメーターを admin_consent に設定します。省略した場合、同意画面はユーザーがアプリケーションに対して初めて権限を付与する際にのみ表示されます。

リクエスト例

https://signin.alibabacloud.com/oauth2/v1/auth?
client_id=98989****
&redirect_uri=meeting%3A%2F%2Fauthorize%2F
&response_type=code
&scope=openid%20%2Fworksuite%2Fuseraccess
&state=123456****
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSst****
&code_challenge_method=S256

応答例

ユーザーが同意を付与した場合、権限付与サーバーは、認証コードおよび state をクエリパラメーターとして付加した状態で、ユーザーのブラウザをご利用の redirect_uri へリダイレクトします。

GET HTTP/1.1 302 Found
Location: meeting://authorize/?code=ABAFDGDFXYZW888&state=123456****                     

ステップ 2:認証コードをアクセストークンと交換

アプリケーションが認証コードを受信した後、バックエンドサーバーから Alibaba Cloud トークンエンドポイント(https://oauth.alibabacloud.com/v1/token)へ POST リクエストを送信し、認証コードをトークンと交換する必要があります。

リクエストパラメーター(POST ボディ)

パラメーター

必須

説明

code

はい

ステップ 1 で受信した認証コードです。

client_id

はい

ご利用のネイティブアプリの ID です。

redirect_uri

はい

ステップ 1 のリクエストで使用したのと同じリダイレクト URI です。

grant_type

はい

authorization_code に設定する必要があります。

code_verifier

いいえ

ステップ 1 で生成した元の code_verifier 文字列です。

リクエスト例

POST /v1/token HTTP/1.1 
Host: oauth.alibabacloud.com 
Content-Type: application/x-www-form-urlencoded
code=ABAFDGDFXYZW888&
client_id=98989****
redirect_uri=meeting://authorize/&
grant_type=authorization_code&
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk                    

応答例

リクエストが成功した場合、トークンエンドポイントはトークンを含む JSON オブジェクトを返します。

{
  "access_token": "eyJraWQiOiJrMTIzNCIsImVuYyI6****",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "Ccx63VVeTn2dxV7ovXXfLtAqLLERA****",
  "id_token": "eyJhbGciOiJIUzI1****"
}                      

ステップ 3(任意):アクセストークンの更新

更新トークンを使用することで、ユーザーが再度ログインすることなく新しいアクセストークンを取得できます。エンドポイントhttps://oauth.alibabacloud.com/v1/token

リクエストパラメーター(POST ボディ)

パラメーター

必須

説明

refresh_token

はい

以前に受信した更新トークンです。

client_id

はい

ご利用のネイティブアプリの ID です。

grant_type

はい

refresh_token に設定する必要があります。

リクエスト例

POST /v1/token HTTP/1.1 
Host: oauth.alibabacloud.com 
Content-Type: application/x-www-form-urlencoded
refresh_token=Ccx63VVeTn2dxV7ovXXfLtAqLLERAH****
client_id=98989****
grant_type=refresh_token

応答例

トークンエンドポイントは新しいアクセストークンを返します。

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

更新トークンの取り消し

ユーザーがアプリケーションからログアウトする場合、またはアカウントの連携を解除する場合、関連する更新トークンを取り消して無効化する必要があります。

エンドポイントhttps://oauth.alibabacloud.com/v1/revoke

リクエストパラメーター(POST ボディ)

パラメーター

必須

説明

token

はい

取り消す更新トークンです。

client_id

はい

ご利用のネイティブアプリの ID です。

正常なリクエストの場合、HTTP 200 OK ステータスが返されます。