Box公式SDKを利用すると、一般的な認証のハードルはなくなりますが、Box APIは、Box公式SDKがなくても使用できます。このガイドでは、OAuth 2.0のフローを手動で完成させるための手順を説明します。
- 承認URLを作成する
- ユーザーを承認URLにリダイレクトする
- ユーザーが自分の代わりにアクションを実行するためのアクセス権限をアプリケーションに付与する (成功した場合は承認コードが提供される)
- ユーザーを再度アプリケーションにリダイレクトする
- 承認コードをアクセストークンと交換する
このフローが終了すると、アプリケーションにはアクセストークンが付与されます。これを使用すると、ユーザーの代わりにAPIコールを実行できます。
OAuth 2.0フローを介して取得したアクセストークンは、もともとアプリケーションを承認したユーザーに関連付けられています。as-userヘッダーを使用して、別のユーザーとして処理を実行できます。
前提条件
続行する前に、以下の手順を完了しておく必要があります。
- Box開発者コンソールで、OAuth 2.0認証方法を利用するPlatformアプリを作成する。
- アプリケーションの [構成] タブに移動して、
client_idとclient_secretの値をコピーする。
- アプリケーションの [構成] タブで、少なくとも1つのリダイレクトURIが構成されていることを確認する。
1. 承認URLを作成する
承認URLは、以下のパラメータで構成されています。
| パラメータ | ステータス | 説明 |
|---|
CLIENT_ID | 必須 | 開発者コンソールの [構成] タブから取得します。 |
REDIRECT_URI | 省略可 | 開発者コンソールで構成します。アプリケーションにアクセスを許可すると、ユーザーがリダイレクトされます。 |
RESPONSE_TYPE | 必須 | 常にcodeに設定します。 |
STATE | 推奨 | クロスサイトリクエスト偽造から保護します。 |
アプリケーション用にリダイレクトURIを複数設定した場合、承認URLには、開発者コンソールで設定したURIのいずれかと一致するredirect_uriパラメータを含める必要があります。このパラメータが指定されていない場合、ユーザーにはredirect_uri_missingエラーが表示され、アプリにリダイレクトされません。
少なくとも、このURLは常に次の形式を使用します。
https://account.box.com/api/oauth2/authorize?client_id=CLIENTIDHERE&response_type=code
var baseUrl = "https://account.box.com/api/oauth2/authorize";
var clientId = "[CLIENT_ID]";
var authorizationUrl = $"{baseUrl}?client_id={clientId}&response_type=code";
BoxインスタンスのBox Verified Enterpriseが有効になっている場合、標準的なaccount.box.comというベースURLを使用する際に問題が発生することがあります。account.box.comの代わりにent.box.comを使用してください。
2. ユーザーをリダイレクトする
次に、ユーザーを承認URLにリダイレクトします。その方法は、アプリケーションフレームワークによって異なります。このトピックの詳細については、ほとんどのフレームワークのドキュメントで説明されています。
指定されたアプリに対して承認URLが無効な場合、ユーザーには、アクセスの許可画面ではなくエラーページが表示されます。たとえば、承認URLに含まれるredirect_uriパラメータが、アプリ用に構成されたURIのいずれとも一致しない場合、ユーザーにはredirect_uri_mismatchエラーが表示されます。
var authorizationUrl = $"{baseUrl}?client_id={clientId}&response_type=code";
// redirectTo(authorizationUrl);
スコープを制限したり追加の状態を渡したりするために、ユーザーをリダイレクトする際に追加のクエリパラメータを渡すことができます。詳細については、承認のリファレンスドキュメントを参照してください。
3. ユーザーがアプリケーションにアクセス権限を付与する
ユーザーは、Box UIを使用して自分のアカウントにログインするために、ブラウザにリダイレクトされます。その後、リクエストされているスコープのリストと、ユーザーに代わって処理を行うアプリケーションを承認するためのオプションが表示されます。
ユーザーが [Boxへのアクセスを許可] をクリックしてこのリクエストを承認すると、ブラウザは、クエリパラメータに有効期間の短い承認コードが指定されている構成済みのリダイレクトURLにリダイレクトされます。
アプリケーション用にリダイレクトURIを複数設定した場合、承認URLには、開発者コンソールで設定したURIのいずれかと一致するredirect_uriパラメータを含める必要があります。このパラメータが指定されていない場合、ユーザーにはredirect_uri_missingエラーが表示され、アプリにリダイレクトされません。
https://your.domain.com/path?code=1234567
4. コードを交換する
提供される承認コードは、有効期間が30秒のため、有効期限が切れる前にアクセストークンに交換する必要があります。
using System.Net;
using System.Net.Http;
using Newtonsoft.Json;
String authenticationUrl = "https://api.box.com/oauth2/token";
var client = new HttpClient();
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("grant_type", "authorization_code"),
new KeyValuePair<string, string>("code", "[CODE]"),
new KeyValuePair<string, string>("client_id", "[CLIENT_ID]"),
new KeyValuePair<string, string>("client_secret", "[CLIENT_SECRET]")
});
var response = client.PostAsync(authenticationUrl, content).Result;
class Token
{
public string access_token { get; set; }
}
var data = response.Content.ReadAsStringAsync().Result;
var token = JsonConvert.DeserializeObject<Token>(data);
var accessToken = token.access_token;
アクセストークンの使用方法を確認するには、APIコールの実行に関するガイドを参照してください。