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

Drive and Photo Service:OAuth 2.0によるウェブブラウザアプリケーションへのアクセス

最終更新日:Dec 28, 2024

説明

このトピックでは、フロントエンドのJavaScriptウェブアプリケーションがOAuth 2.0を使用してDriveおよびPhoto Serviceにアクセスする方法について説明します。フロントエンドJavaScriptウェブアプリケーションは、ChromeプラグインまたはJavaScriptのウィジェットです。

アプリケーションはフロントエンドアプリケーションであるため、AppSecretsなどの機密情報をこれらのアプリケーションに保存することは安全ではありません。これらのアプリケーションのDriveおよびPhoto Serviceの認証手順は、ウェブサーバーアプリケーションの認証手順とは異なります。

1. 概要

(1) OAuth 2.0 Implicit Grant Type

Implicit Grant Typeは、サードパーティアプリケーションサーバーから認証コードを取得する必要なく、ブラウザの認証サーバーから直接アクセストークンを取得する方法です。すべての操作はブラウザで実行されます。トークンはすべての訪問者に表示され、クライアント側での認証は必要ありません。

(2) SPAのフローチャート

image

2. 準備

(1) ドメインの作成

PDS(DriveおよびPhoto Service)コンソールでドメインを作成します。ドメインが作成されると、https://{domainId}.api.aliyunpds.comの形式の第4レベルAPIドメイン名が提供されます。

(2) ログインページの有効化

認証のためにDriveおよびPhoto Serviceによって提供されるログインページを有効にします。DriveおよびPhoto Serviceは、次の第4レベルドメイン名を提供します:https://{domainId}.api.aliyunpds.com

(3) DriveおよびPhoto ServiceコンソールでOAuthクライアントとして使用するアプリケーションの作成

アプリケーションを作成します。「タイプ」として「WebBrowser(Webクライアントアプリケーション)」を選択します。「パーミッションスコープ」パラメータを指定します。詳細については、スコープを参照してください。スコープは同意ページに表示されます。リダイレクトURIを設定します。アプリケーションが作成されると、アプリケーションのAppIdを取得できます。AppIdは、OAuth認証のClientIdとして使用されます。

3. 認証の原則とAPI操作

(1) 認証操作の呼び出し

新しいページで次のコマンドを実行します。

// 認証用のウェブページを開きます。
var domainId ='あなたのドメインID'
var authWin = window.open('https://'+domainId+'.api.aliyunpds.com/v2/oauth/authorize?client_id='+APP_ID+'&response_type=token&state=abc&login_type=default&redirect_uri=http://example.com/callback',  '_blank', 'location=0,status=0,titlebar=0,menubar=0,resizable=0,height=500,width=600', true)
authWin.onmessage=function(e){
  var hash = e.data;
  // ハッシュの値を解析してアクセストークンを取得します。
}
説明

APIリクエスト構文:

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

パラメータ

必須

説明

client_id

はい

アプリケーションのAppId。AppIdがない場合は、DriveおよびPhoto Serviceコンソールでアプリケーションを作成してAppIdを取得します。

redirect_uri

はい

認証プロセスが完了した後、DriveおよびPhoto Service認証サーバーがユーザーをリダイレクトするURI。ウェブサーバーアプリケーションによって提供されるURL。例:https://example.com/callback。認証プロセスが完了すると、DriveおよびPhoto Service認証サーバーは、https://example.com/callback#access_token=xxx&expires_in=xxx&token_type=Bearerの形式でアクセストークン情報が付加されたURIにユーザーをリダイレクトします。指定するリダイレクトURIは、アプリケーションに設定したものと同じである必要があります。

scope

いいえ

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

response_type

はい

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

state

いいえ(推奨)

このパラメータが指定されている場合、DriveおよびPhoto Service認証サーバーはリプレイ攻撃を防ぐために、この値をリダイレクトURIでそのまま返します。

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_CNおよびen_US。デフォルト値:zh_CN

(2) リダイレクトURI

  • 認証が成功した場合、DriveおよびPhoto Service認証サーバーは、http://example.com/callback#access_token=xxx&expires_in=xxx&token_type=Bearerの形式のURIにユーザーをリダイレクトします。

  • 認証に失敗した場合、DriveおよびPhoto Service認証サーバーは、http://example.com/callback#error=xxxxxxの形式のURIにユーザーをリダイレクトします。

サンプルコード:

<!DOCTYPE html>
<html>
<body>
  <script>
    var hash = location.hash;
    if (hash) {
      var sch = new URLSearchParams(hash.replace(/^#?/g, ''))
      var access_token = sch.get('access_token')
      var expires_in = parseInt(sch.get('expires_in'))
      var expire_time = sch.get('expire_time')
      if(!isNaN(expires_in) && !expire_time){
        expire_time=new Date(Date.now()+expires_in*1000).toISOString()
      }
      var token_type = sch.get('token_type')
      var state = JSON.parse(sch.get('state') || '{}')
      top.opener.postMessage({ access_token, expires_in,expire_time, token_type }, state.origin)
      window.location.replace(window.location.origin + window.location.pathname)
    } else {
      window.close()
    }
  </script>
</body>
</html>

コールバックページでハッシュの値を解析してアクセストークンを取得します。postMessage()を使用して、認証用ウェブページとユーザーがリダイレクトされるページ間の通信を有効にします。

(3) アクセストークンの取得

認証用ウェブページで、リダイレクトされたページからpostMessage()によって返されたアクセストークンを取得できます。

4. DriveおよびPhoto Service API操作の呼び出し

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