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

Drive and Photo Service:モバイルアプリケーションとデスクトップアプリケーションのOAuth 2.0アクセスプロセス

最終更新日:Dec 28, 2024

説明

このトピックでは、モバイルアプリケーションとデスクトップアプリケーションがOAuth 2.0を使用してドライブおよびフォトサービスにアクセスする方法について説明します。

1. 概要

モバイルアプリケーションとデスクトップアプリケーションはネイティブアプリケーションです。これらのアプリケーションにAppSecretなどの機密情報を保存することは安全ではありません。

AndroidまたはiOS用のモバイルアプリケーションは、URLスキームを使用して認証アプリケーションを起動できます。

macOS、Linux、またはWindows用のデスクトップアプリケーションは、ループバックIPアドレスまたはURLスキームを使用して認証アプリケーションを起動できます。

または、アプリケーションはWebViewを使用してWebアプリケーションに認証リクエストを送信することもできます。

(1) 仕組み

認証コードモード:モバイルアプリケーションまたはデスクトップアプリケーションの認証コードを使用したアクセスプロセスは、Webアプリケーションのアクセスプロセスと似ています。唯一の違いは、アクセストークンを取得するためにAppSecretを提供する必要がないことです。これは、Webサーバーが存在せず、モバイルアプリケーションまたはデスクトップアプリケーションにAppSecretを保存することは安全ではないためです。

(2) フローチャート

image

2. 準備

(1) ドメインの作成

ドライブおよびフォトサービスコンソールでドメインを作成します。ドメインが作成されると、https://{domainId}.api.aliyunpds.comの形式の第4レベルAPIドメイン名が提供されます。

(2) ユーザーシステムログオン機能の有効化

ドライブおよびフォトサービスは、ログオン認証用にいくつかの一般的なユーザーシステムを提供しています。開発者は、ドライブおよびフォトサービスコンソールでユーザーシステムログオン機能を有効にできます。詳細については、PDSユーザーシステムを参照してください。

(3) ドライブおよびフォトサービスコンソールでOAuthクライアントとして使用するアプリケーションの作成

ネイティブアプリケーションを作成します。アプリケーションのスコープを指定します。スコープは同意ページに表示されます。アプリケーションが作成されると、アプリケーションのAppIdとAppSecretを取得できます。AppIdとAppSecretは、OAuth認証のClientIdとClientSecretとして使用されます。AppKeyとAppSecretは、認証と認可のための資格情報です。AppSecretは機密にしておく必要があります。

(4) リダイレクトURIの計画

AndroidまたはiOSアプリケーションに適用可能なカスタムURLスキームを使用する

アプリケーションを一意に識別するために、アプリケーションのURLスキームを登録します。スキームの形式は次のとおりです:<スキームドメイン名>://<パス>?<パラメータ>=<値>

デスクトップアプリケーションに適用可能なカスタムループバックIPアドレスを使用する

ポートでリッスンするローカルWebサービスを開始できます。例:http://127.0.0.1:3000/callbackまたはhttp://[::1]:3000

3. OAuth 2.0アクセストークンの取得

(1) Authorize操作の呼び出し

APIリクエスト構文:

GET /v2/oauth/authorize?client_id=<appId>&redirect_uri=<redirect_uri>&scope=<scope>&login_type=<login_type>&state=[state]&prompt=[prompt] HTTP/1.1
Host: {domainId}.api.aliyunpds.com

パラメータ

必須

説明

client_id

はい

アプリケーションのAppId。AppIdがない場合は、ドライブおよびフォトサービスコンソールでアプリケーションを作成してAppIdを取得します。

redirect_uri

はい

認証プロセスが完了した後、ドライブおよびフォトサービス認証サーバーがユーザーをリダイレクトするURI。このパラメータを、アプリケーションによって提供されるURLスキームまたはループバックIPアドレスに設定します。例:pdshz001://callback/。認証が完了すると、ドライブおよびフォトサービス認証サーバーは、pdshz001://callback/?code=xxxxの形式でワンタイム認証コードが付加されたリダイレクトURIにユーザーをリダイレクトします。この認証コードをアクセストークンと交換できます。注:指定するリダイレクトURIは、アプリケーションに設定したものと同じである必要があります。

scope

はい

アプリケーションに必要な権限を指定するスコープ。スコープは同意ページに表示されます。詳細については、Authorizeを参照してください。

response_type

はい

レスポンスのタイプ。値をcodeに設定します。

state

いいえ(推奨)

このパラメータが指定されている場合、ドライブおよびフォトサービス認証サーバーは、リプレイ攻撃を防ぐために、この値をリダイレクトURIでそのまま返します。例:pdshz001://callback/?code=xxxx&state=abc

login_type

はい

ログオン方法。有効な値:default、phone、ding、ldap、wx、ramdefault:デフォルトのログオンページにログオンします。デフォルトのログオンページには、SMS確認コードを使用したログオンなど、他のログオン方法へのリンクも用意されています。phone:SMS確認コードを使用してログオンします。ding:DingTalkアプリケーションを使用してQRコードをスキャンしてログオンします。ldap:Active Directory(AD)ドメインまたはLightweight Directory Access Protocol(LDAP)を使用してログオンします。wx:WeChatを使用してログオンします。ram:RAMユーザーとしてログオンします。

hide_consent

いいえ

ユーザーが初めてログオンする場合に同意ページを表示するかどうかを指定します。有効な値:trueとfalse。値がtrueの場合、同意ページは表示されません。

lang

いいえ

ページが表示される言語。有効な値:zh_CNen_US。デフォルト値:zh_CN

ユーザーがこのリクエストを送信すると、ドライブおよびフォトサービス認証サーバーはユーザーにログオンするように指示します。ユーザーが初めてログオンし、hide_consentパラメータをtrueに設定していない場合、ドライブおよびフォトサービス認証サーバーはユーザーを同意ページにリダイレクトします。それ以外の場合、ドライブおよびフォトサービス認証サーバーは、redirect_uriパラメータで指定されたリダイレクトURIにユーザーをリダイレクトします。例:pdshz001://callback/?code=xxxx&state=abc

(2) 同意ページでアプリケーションに権限を付与する

同意ページで、ユーザーは指定された権限をアプリケーションに付与するかどうかを決定できます。ユーザーが権限の付与を拒否した場合、プロセスは終了します。ユーザーが権限の付与に同意した場合、ドライブおよびフォトサービスは、redirect_uriパラメータで指定されたリダイレクトURIにユーザーをリダイレクトします。例:pdshz001://callback/?code=xxxx&state=abc

(3) 認証コードをアクセストークンと交換する

認証コードを取得した後、Token操作を呼び出して認証コードをアクセストークンと交換できます。

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\
&redirect_uri=pdshz001://callback\
&grant_type=authorization_code

パラメータ

必須

説明

code

はい

ワンタイム認証コード。

client_id

はい

アプリケーションのAppId。

redirect_uri

はい

アプリケーションに設定したリダイレクトURI。

grant_type

はい

OAuth 2.0仕様に基づいて、値をauthorization_codeに設定します。

レスポンスパラメータ

パラメータ

場所

タイプ

必須

説明

access_token

body

STRING

はい

生成されたアクセストークン。2時間有効です。

expires_time

body

STRING

はい

アクセストークンの有効期限。

expire_in

body

STRING

はい

アクセストークンの残りの有効期間。単位:秒。

token_type

body

STRING

はい

値はBearerに固定されています。

成功レスポンスの例:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "access_token":"Aiasd76YSo23...LSdyssd2",
  "expires_time":"2019-11-11T10:10:10.009Z",
  "expire_in": 7200,
  "token_type":"Bearer",
  "refresh_token":"LSLKdklksd...li3ew6"
}
説明

このリクエストへのレスポンスは、認証コードを使用してアクセストークンを取得した場合に返されるレスポンスと同じですが、refresh_tokenパラメータは含まれていません。

説明

レスポンス内のオプションパラメータは無視してください。

4. ドライブおよびフォトサービスAPI操作の呼び出し

アプリケーションは、アクセストークンを使用してドライブおよびフォトサービスAPI操作を呼び出すことができます。アクセストークンは、APIリクエストのAuthorizationヘッダーに含める必要があります。

詳細については、呼び出し方法を参照してください。

5. アクセストークンの更新

(1) APIリクエスト構文

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\
&grant_type=refresh_token

リクエストパラメータ

パラメータ

必須

説明

refresh_token

はい

認証コードをアクセストークンと交換したときに返される更新トークン。

client_id

はい

アプリケーションのAppId。

grant_type

はい

付与方法のタイプ。OAuth 2.0仕様に基づいて、値をrefresh_tokenに設定します。

client_secret

いいえ

アプリケーションのAppSecret。AppSecretは、アプリケーションを認証するために使用されます。

(2) レスポンス

HTTP/1.1 200 OK
Content-Type: application/json

{
  "access_token":"xxxxxxxxx",
  "expires_in":3920,
  "expire_time":"2019-11-11T10:10:10.009Z",
  "token_type":"Bearer"
}

レスポンスパラメータ

アクセストークンの更新リクエストへのレスポンスの構造は、認証コードをアクセストークンと交換するリクエストへのレスポンスと同じです。