このトピックでは、OAuth 2.0 を使用して Web サーバーアプリケーションから Drive and Photo Service (PDS) にアクセスする方法について説明します。
OAuth 2.0 の概要
OAuth 2.0 を使用すると、アカウントのパスワードを明かすことなく、サードパーティのサービスにリソース情報の取得を権限付与できます。
OAuth 2.0 は、認証コード、暗黙的、リソース所有者パスワード資格情報、およびクライアント資格情報の認証方式をサポートしています。認証コード方式は、最高レベルのセキュリティを提供します。このトピックでは、認証コード方式を使用します。
次の図は、Authorization Code メソッドを使用した OAuth 2.0 の権限付与プロセスを示しています。

Web サーバー アプリケーションのアクセス プロセス

プロセス:
ログインと承認
ユーザーが Web サーバー アプリケーションにアクセスします。Web サーバー アプリケーションは、アクセス リクエストを認証サーバーにリダイレクトします。ユーザーは、Web サーバー アプリケーションを承認するかどうかを決定するように求められます。
アクセストークンの取得
ユーザーが Web サーバー アプリケーションの承認に同意すると、認証サーバーはアクセス リクエストをアプリケーションで指定されたリダイレクト URI にリダイレクトし、認証コードを生成します。
認証コードを受信した後、Web サーバー アプリケーションは認証サーバーにアクセストークンをリクエストします。このようにして、ユーザーはアクセストークンを取得します。
リソースへのアクセス
ユーザーはアクセストークンを使用して、Web サーバー アプリケーションのフロントエンドで PDS API にアクセスします。
前提条件
OAuth 2.0 をサポートするサービスが準備されていること。
[PDS 開発者版] がアクティブ化されていること。詳細については、「PDS を使い始める」をご参照ください。
手順
ステップ 1: アプリケーションの ID とシークレットを取得する
PDS コンソールにログインします。左側のナビゲーションウィンドウで、[Drive And Photo Service (開発者版)] > [ドメイン] を選択します。
使用するドメインを見つけ、[詳細] 列の [詳細] をクリックします。
アプリケーションを作成します。
説明使用可能なアプリケーションがない場合は、後続の操作を実行する前にアプリケーションを作成してください。
ドメイン詳細ページで、[アプリケーション] タブをクリックし、[アプリケーションの作成] をクリックします。
必要な情報を入力し、[OK] をクリックします。
種類パラメーターには、WebServer(Web サーバー アプリケーション)を選択します。

アプリケーション リストで、作成したアプリケーションの [ID](client_id)と [シークレット](client_secret)を表示します。
重要シークレットは機密にしておく必要があります。
ステップ 2: OAuth 2.0 ベースのログインを承認する
承認パラメーターを設定する
権限付与を完了していないユーザーがブラウザを使用して Web サーバーアプリケーションにアクセスする場合、アプリケーションは権限付与のリクエストを構築する必要があります。リクエストには、アプリケーションの client_id と権限のスコープが含まれます。リクエストはユーザーから PDS 権限付与サーバーに送信され、ユーザーはアプリケーションに必要な権限を付与できます。
リクエストの例:
GET /v2/oauth/authorize?client_id=<ID>&redirect_uri=<redirect_uri>&login_type=<login_type>&scope=<scope>&response_type=code&state=[state] HTTP/1.1 Host: {domainId}.api.aliyunpds.com次の表に、リクエスト パラメーターを示します。
パラメーター
必須
説明
client_id
はい
アプリケーション
ID。ID の取得方法の詳細については、「アプリケーション ID とシークレットの取得」をご参照ください。redirect_uri
はい
コールバック URL。これは、権限付与後にユーザーがリダイレクトされる URL です。例:
https://example.com/callback。権限付与が成功すると、ユーザーはこの URL にリダイレクトされ、これにはワンタイム検証コードが含まれます。例:
https://example.com/callback?code=xxxx。説明コールバック URL が、アプリケーションの作成時に指定した OAuth 2.0 コールバック URL と一致していることを確認してください。
scope
いいえ
アプリケーションに必要な操作の権限を指定するスコープ。スコープは、アプリケーションの作成時に指定したスコープのサブセットであり、同意ページに表示されます。詳細については、「スコープ」をご参照ください。
説明アクセストークンによって表される権限は、ユーザーの権限とスコープで指定された権限の共通部分です。
response_type
はい
静的フィールド。値を
codeに設定します。state
いいえ(推奨)
リクエストにこのパラメーターが含まれている場合、認証サーバーはクロスサイトリクエストフォージェリ (CSRF) 攻撃を防ぐためにそのまま返します。例:
https://example.com/callback?code=xxxx&state=abc。login_type
はい
ログイン オプション。有効な値:
default: 携帯電話番号ログインなどのログイン方法をサポートする包括的なログイン ページを提供します。
phone: 携帯電話番号ログイン。
ding: DingTalk でのログイン。
ldap: Lightweight Directory Access Protocol(LDAP)または Active Directory(AD)に基づくログイン。
wx: WeChat アカウントでのログイン。
ram: Resource Access Management(RAM)ユーザーとしてのログイン。
lark: Lark でのログイン。
saml: Security Assertion Markup Language(SAML)プロトコルに基づくサードパーティ アカウントでのログイン。
hide_consent
いいえ
最初のログイン成功後に、後続のログイン試行でユーザー承認ページをスキップするかどうかを指定します。有効な値:
true(デフォルト): 承認ページは表示されません。ユーザーは次のステップに直接進みます。
false: 承認ページが表示されます。
lang
いいえ
ページが表示される言語。有効な値:
zh_CN(デフォルト): 簡体字中国語
en_US: 英語
同意ページ
このステップでは、ユーザーは Web サービスアプリケーションに権限を付与するかどうかを決定します。ユーザーが権限付与を拒否した場合、プロセスは停止します。ユーザーが権限を付与した場合、ユーザーは最初のリクエストの
redirect_uriにリダイレクトされます。例:https://example.com/callback?code=xxxx&state=abc。認証コードをアクセストークンと交換する
Web サービスアプリケーションは、フロントエンドとバックエンドで構成されます。フロントエンドで
https://example.com/callbackなどのリダイレクト URL を設定できます。フロントエンドが?code=xxxパラメーターを受信した後、コードを解析してバックエンドに渡す必要があります。その後、バックエンドは次の API 操作を呼び出してアクセストークンを取得し、それをフロントエンドに返します。リクエストの例:
POST /v2/oauth/token HTTP/1.1 Host: {domainId}.api.aliyunpds.com Content-Type: application/x-www-form-urlencoded code=xxx\ &client_id=your_app_id\ &client_secret=your_app_secret\ &redirect_uri=https://example.com/callback\ &grant_type=authorization_codeパラメーター
必須
説明
code
はい
ワンタイム
code。一度使用すると有効期限が切れます。client_id
はい
アプリケーション
ID。ID の取得方法の詳細については、「アプリケーション ID とシークレットの取得」をご参照ください。client_secret
はい
アプリケーションの作成時に生成された
secret。redirect_uri
はい
コールバック URL。これは、権限付与後にユーザーがリダイレクトされる URL です。例:
https://example.com/callback。説明コールバック URL が、アプリケーションの作成時に指定した OAuth 2.0 コールバック URL と一致していることを確認してください。
grant_type
はい
権限付与タイプ。これは静的フィールドです。値を
authorization_codeに設定して、認証コード権限付与タイプを示します。戻り値:
HTTP/1.1 200 OK Content-Type: application/json { "access_token":"Aiasd76*****", "expires_time":"2019-11-11T10:10:10.009Z", "expire_in": 7200, "token_type":"Bearer", "refresh_token":"LSLKdk*******" }パラメーター
位置
タイプ
必須
説明
access_token
本文
文字列
はい
生成された
access_token。有効期間は 2 時間です。refresh_token
本文
文字列
はい
access_tokenを更新するために使用されるトークン。有効期間は長く、通常は 7 日間です。expires_time
本文
文字列
はい
access_tokenの有効期限が切れる時間。expire_in
本文
long
はい
access_tokenの有効期間 (秒単位)。デフォルト値: 7200。token_type
本文
文字列
はい
トークンタイプ。これは値が
Bearerの静的フィールドです。PDS API を呼び出す
Web フロントエンドは
access_tokenを使用して PDS API を直接呼び出すことができます。リクエストのAuthorizationヘッダーにaccess_tokenを含める必要があります。詳細については、「呼び出し方法」をご参照ください。
アクセストークンを更新する
リクエストの例:
POST /v2/oauth/token HTTP/1.1
Host: {domainId}.api.aliyunpds.com
Content-Type: application/x-www-form-urlencoded
refresh_token=xxx\
&client_id=xxx\
&client_secret=xxx\
&grant_type=refresh_token次の表に、リクエスト パラメーターを示します。
パラメーター | 必須 | 説明 |
refresh_token | はい | 認証コードをアクセストークンと交換したときに返される更新トークン。 |
client_id | はい | アプリケーション |
grant_type | はい | 静的フィールド。値を |
client_secret | はい | アプリケーションのシークレット。アプリケーションの認証に使用されます。 |
戻り値:
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token":"xxxxxxxxx",
"refresh_token": "xxxxx",
"expires_in":7200,
"expire_time":"2019-11-11T10:10:10.009Z",
"token_type":"Bearer"
}名前 | 位置 | タイプ | 必須 | 説明 |
access_token | 本文 | 文字列 | はい | 生成された |
refresh_token | 本文 | 文字列 | はい |
|
expires_time | 本文 | 文字列 | はい |
|
expire_in | 本文 | long | はい |
|
token_type | 本文 | 文字列 | はい | トークンタイプ。これは値が |
FAQ
関連情報
PDS 開発者版の API 操作の呼び出し方法については、「呼び出し方法」をご参照ください。
OAuth 2.0 を使用してモバイルまたはデスクトップアプリケーションから PDS にアクセスする方法については、「モバイルおよびデスクトップアプリケーションの OAuth 2.0 アクセス」をご参照ください。
OAuth 2.0 を使用して Web ブラウザーアプリケーションから PDS にアクセスする方法については、「Web ブラウザーアプリケーションの OAuth 2.0 アクセス」をご参照ください。