SDKを使用しないOAuth 2.0
SDKを使用しないOAuth 2.0
概要
Box公式SDKを利用すると、一般的な認証のハードルはなくなりますが、Box APIは、Box公式SDKがなくても使用できます。このガイドでは、OAuth 2.0のフローを手動で完成させるための手順を説明します。
- 承認URLを作成する
- ユーザーを承認URLにリダイレクトする
- ユーザーが自分の代わりにアクションを実行するためのアクセス権限をアプリケーションに付与する (成功した場合は承認コードが提供される)
- ユーザーを再度アプリケーションにリダイレクトする
- 承認コードをアクセストークンと交換する
このフローが終了すると、アプリケーションにはアクセストークンが付与されます。これを使用すると、ユーザーの代わりにAPIコールを実行できます。
前提条件
続行する前に、以下の手順を完了しておく必要があります。
- Box開発者コンソールで、OAuth 2.0認証方法を利用するPlatformアプリを作成する。
- アプリケーションの [構成] タブに移動して、
client_id
とclient_secret
の値をコピーする。 - アプリケーションの [構成] タブで、少なくとも1つのリダイレクトURIが構成されていることを確認する。
1. 承認URLを作成する
承認URLは、以下のパラメータで構成されています。
パラメータ | ステータス | 説明 |
---|---|---|
CLIENT_ID | 必須 | 開発者コンソールの [構成] タブから取得します。 |
REDIRECT_URI | 省略可 | 開発者コンソールで構成します。アプリケーションにアクセスを許可すると、ユーザーがリダイレクトされます。 |
RESPONSE_TYPE | 必須 | 常にcode に設定します。 |
STATE | 推奨 | クロスサイトリクエスト偽造から保護します。 |
少なくとも、このURLは常に次の形式を使用します。
https://account.box.com/api/oauth2/authorize
?client_id=CLIENTIDHERE
&response_type=code
.Net
var baseUrl = "https://account.box.com/api/oauth2/authorize";
var clientId = "[CLIENT_ID]";
var authorizationUrl = $"{baseUrl}?client_id={clientId}&response_type=code";
Java
String baseUrl = "https://account.box.com/api/oauth2/authorize";
String clientId = "[CLIENT_ID]";
String authorizationUrl = String.format("%s?client_id=%s&response_type=code", baseUrl, clientId);
Python
base_url = 'https://account.box.com/api/oauth2/authorize'
client_id = '[CLIENT_ID]'
authorizationUrl = f'{base_url}?client_id=${client_id}&response_type=code'
Node
var baseUrl = "https://account.box.com/api/oauth2/authorize";
var clientId = "[CLIENT_ID]";
var authorizationUrl = `${baseUrl}?client_id=${clientId}&response_type=code`;
承認URLの詳細を確認する
2. ユーザーをリダイレクトする
次に、ユーザーを承認URLにリダイレクトします。その方法は、アプリケーションフレームワークによって異なります。このトピックの詳細については、ほとんどのフレームワークのドキュメントで説明されています。
指定されたアプリに対して承認URLが無効な場合、ユーザーには、アクセスの許可画面ではなくエラーページが表示されます。たとえば、承認URLに含まれるredirect_uri
パラメータが、アプリ用に構成されたURIのいずれとも一致しない場合、ユーザーにはredirect_uri_mismatch
エラーが表示されます。
.NET
var authorizationUrl = $"{baseUrl}?client_id={clientId}&response_type=code";
// redirectTo(authorizationUrl);
Java
String authorizationUrl = String.format("%s?client_id=%s&response_type=code", baseUrl, clientId);
// response.redirect(authorizationUrl);
Python
auth_url = f'{base_url}?client_id=${client_id}&response_type=code'
// redirect(auth_url, code=302)
Node
var authorizationUrl = `${baseUrl}?client_id=${clientId}&response_type=code`;
// res.redirect(authorize_url)