Box Developerドキュメント

SDKを使用したOAuth 2.0

ガイド 認証 OAuth 2.0認証 SDKを使用したOAuth 2.0

SDKを使用したOAuth 2.0

Box SDKには、クライアント側OAuth 2.0のサポートが組み込まれています。

このプロセスでは、ユーザーはブラウザでBoxウェブアプリにリダイレクトされます。そこで、ユーザーはログインし、アプリケーションによる自分のデータへのアクセスを承認すると、アプリケーションのredirect_urlに再度リダイレクトされます。この最後の手順では、ユーザーがアクセス可能な場所にあるウェブサーバー上でアプリケーションが実行されている必要があります。

概要

OAuth 2.0フローを完了するには、以下の手順を完了する必要があります。

  1. Box SDKを構成する
  2. ユーザーをBoxウェブサイトにリダイレクトする
  3. ユーザーがアプリケーションにアクセス権限を付与する
  4. 承認コードをアクセストークンと交換する

このフローが終了すると、アプリケーションには、このユーザーの代わりにAPIコールを実行するために使用できるアクセストークンが用意されます。

OAuth 2.0を介して取得したアクセストークンは、もともとアプリケーションを承認したユーザーに関連付けられています。このトークンを使用して実行されるAPIコールはどれも、このアプリケーションから実行されているように見えるため、ユーザーには、アプリケーションがこのトークンを使用してアクセスしようとするファイルやフォルダへのアクセス権限が必要です。

パラメータ

パラメータ説明
CLIENT_IDアプリケーションのクライアントIDまたはAPIキー
CLIENT_SECRETアプリケーションのクライアントシークレットまたはAPIシークレット
REDIRECT_URIユーザーがアプリケーションを承認した後に送信されるアプリケーションのリダイレクトURL。これは開発者コンソールで構成できます。

1. SDKを構成する

最初の手順として、選択したSDKを使用して環境が準備されていることを確認します。

.NET
var redirectUrl = "[REDIRECT_URI]";
var config = new BoxConfig("[CLIENT_ID]", "[CLIENT_SECRET]", new Uri(redirectUrl));
var sdk = new BoxClient(config);

Java
import com.box.sdk.BoxAPIConnection;

String authorizationUrl = "https://account.box.com/api/oauth2/authorize?client_id=[CLIENT_ID]&response_type=code";

Python
from boxsdk import OAuth2, Client

auth = OAuth2(
    client_id='[CLIENT_ID]',
    client_secret='[CLIENT_SECRET]'
)

Node
var BoxSDK = require("box-node-sdk");

var sdk = new BoxSDK({
    clientID: "[CLIENT_ID]",
    clientSecret: "[CLIENT_SECRET]",
});

ご利用の環境に合わせたSDKのインストールの詳細を確認する

2. ユーザーをリダイレクトする

次に、承認URLにユーザーをリダイレクトします。ほとんどのSDKでは、SDKクライアントの承認URLを取得する方法をサポートしています。

アプリケーション用にリダイレクトURIを複数設定した場合、承認URLには、開発者コンソールで設定したURIのいずれかと一致するredirect_uriパラメータを含める必要があります。このパラメータが指定されていない場合、ユーザーがアプリケーションにアクセス権限を付与すると、redirect_uri_missingエラーが表示され、アプリにリダイレクトされません。

.NET
var authorizationUrl = "https://account.box.com/api/oauth2/authorize?client_id=[CLIENT_ID]&response_type=code";
// redirectTo(authorizationUrl);

Java
String authorizationUrl = "https://account.box.com/api/oauth2/authorize?client_id=[CLIENT_ID]&response_type=code";

// response.redirect(authorizationUrl);

Python
auth_url, csrf_token = auth.get_authorization_url('[REDIRECT_URL]')

// redirect(auth_url, code=302)

Node
var authorize_url = sdk.getAuthorizeURL({
    response_type: "code",
});

// res.redirect(authorize_url)

ユーザーがURLにリダイレクトされる方法は、使用されるアプリケーションフレームワークによって異なります。このトピックの詳細については、ほとんどのフレームワークのドキュメントで説明されています。

承認URLは、以下のように手動でも作成できます。

https://account.box.com/api/oauth2/authorize?client_id=[CLIENT_ID]&redirect_uri=[REDIRECT_URI]&response_type=code

スコープを制限したり追加の状態を渡したりするためにユーザーをリダイレクトするときに、追加のクエリパラメータを渡すことができます。詳細については、リファレンスドキュメントを参照してください。

BoxインスタンスのBox Verified Enterpriseが有効になっている場合、標準的なaccount.box.comというベースURLを使用する際に問題が発生することがあります。account.box.comの代わりにent.box.comを使用してください。

3. ユーザーがアプリケーションにアクセス権限を付与する

ユーザーはBoxウェブアプリにリダイレクトされると、ログインする必要があります。ログイン後、ユーザーにはアプリケーションを承認するための画面が表示されます。

OAuth 2.0承認画面の例

ユーザーがこのリクエストを承認し、ボタンをクリックすると、ブラウザは、開発者コンソールで構成されたとおりにアプリケーションのリダイレクトURLにリダイレクトされます。

4. コードを交換する

ユーザーは、有効期間の短い承認コードを含むクエリパラメータが指定されたアプリケーションのリダイレクトURLにリダイレクトされます。

https://your.domain.com/path?code=1234567

このコードはアクセストークンではなく、有効期間はほんの数秒です。SDKを使用すると、このコードを実際のアクセストークンと交換できます。

.NET
var session = await sdk.Auth.AuthenticateAsync("[CODE]");
var client = new BoxClient(config, session);

Java
BoxAPIConnection client = new BoxAPIConnection(
    "[CLIENT_ID]",
    "[CLIENT_SECRET]",
    "[CODE]"
);

Python
auth.authenticate('[CODE]')
client = Client(auth)

Node
var code = "...";

sdk.getTokensAuthorizationCodeGrant("[CODE]", null, function (err, tokenInfo) {
    var client = sdk.getPersistentClient(tokenInfo);
});

このフローが終了すると、アプリケーションには、このユーザーの代わりにAPIコールを実行するために使用できるアクセストークンが用意されます。

SDKとOAuth 2.0の使用

各SDKのOAuth 2.0認証の詳細については、以下を参照してください。