Box Developerドキュメント

クライアント資格情報許可

ガイド 認証 クライアント資格情報許可

クライアント資格情報許可

サーバー認証を利用し、クライアントIDとクライアントシークレットを使用してアプリケーションのIDを確認する場合は、以下の手順に従います。

前提条件

  • Box開発者コンソールでサーバー認証 (クライアント資格情報許可使用) を使用するカスタムアプリケーション
  • [構成] タブからアプリケーションのクライアントシークレットを表示およびコピーするために、Boxアカウントで2要素認証が有効になっていること
  • Box管理コンソールでアプリケーションが承認されていること

クライアントシークレットは機密情報であり、保護する必要があります。アクセストークンの取得時にBoxがアプリケーションのIDを安全に確認するために使用されるため、クライアントシークレットを自由に配布するべきではありません。配布方法には、メール、公開フォーラム、コードリポジトリ、分散されたネイティブアプリケーション、クライアント側のコードなどがあります。さらにセキュリティメカニズムを追加する場合は、Boxの標準的なJWTアプリケーションを使用することをお勧めします。

利用方法

APIコールを実行してアクセストークンを取得する際は、リクエスト本文にクライアントIDとクライアントシークレットを含める必要があります。grant_typeclient_credentialsに設定します。

アプリケーションのサービスアカウントとして認証する場合は、以下のようにします。

  • box_subject_typeenterpriseに設定する
  • box_subject_idをEnterprise IDに設定する
cURL
curl -i -X POST "https://api.box.com/oauth2/token" \
     -H "content-type: application/x-www-form-urlencoded" \
     -d "client_id=[CLIENT_ID]" \
     -d "client_secret=[CLIENT_SECRET]" \
     -d "grant_type=client_credentials" \
     -d "box_subject_type=enterprise"  \
     -d "box_subject_id=[ENTERPRISE_ID]"
Java
BoxCCGAPIConnection api = BoxCCGAPIConnection.applicationServiceAccountConnection(
    "client_id",
    "client_secret",
    "enterprise_id"
);
Python
auth = CCGAuth(
  client_id="YOUR_CLIENT_ID",
  client_secret="YOUR_CLIENT_SECRET",
  enterprise_id="YOUR_ENETRPRISE_ID"
)
.NET
var boxConfig = new BoxConfigBuilder("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")
                .Build();
var boxCCG = new BoxCCGAuth(boxConfig);
Node
const BoxSDK = require('box-node-sdk');
const sdkConfig = {
	boxAppSettings: {
		clientID: "CLIENT_ID",
		clientSecret: "CLIENT_SECRET"
	}, 
	enterpriseID: "ENTERPRISE_ID"
}
const sdk = BoxSDK.getPreconfiguredInstance(sdkConfig)

const client = sdk.getAnonymousClient();
iOS
import BoxSDK

let sdk = BoxSDK(clientId: "YOUR CLIENT ID HERE", clientSecret: "YOUR CLIENT SECRET HERE")
sdk.getCCGClientForAccountService(enterpriseId: "YOUR ENTERPRISE ID HERE") { result in
    switch result {
    case let .success(client):
        // Use client to make API calls
    case let .failure(error):
        // Handle error creating client
    }
}

管理者または管理対象ユーザーとして認証する場合は、以下のようにします。

  • box_subject_typeuserに設定する
  • box_subject_idをユーザーIDに設定する
  • Box開発者コンソールで [アプリ + Enterpriseアクセス] および [ユーザーアクセストークンを生成する] を有効にする
cURL
curl -i -X POST "https://api.box.com/oauth2/token" \
     -H "content-type: application/x-www-form-urlencoded" \
     -d "client_id=[CLIENT_ID]" \
     -d "client_secret=[CLIENT_SECRET]" \
     -d "grant_type=client_credentials" \
     -d "box_subject_type=user"  \
     -d "box_subject_id=[USER_ID]"

任意のアプリケーションユーザーとして認証する場合は、以下のようにします。

  • box_subject_typeuserに設定する
  • box_subject_idをユーザーIDに設定する
  • Box開発者コンソールで [ユーザーアクセストークンを生成する] を有効にする
cURL
curl -i -X POST "https://api.box.com/oauth2/token" \
     -H "content-type: application/x-www-form-urlencoded" \
     -d "client_id=[CLIENT_ID]" \
     -d "client_secret=[CLIENT_SECRET]" \
     -d "grant_type=client_credentials" \
     -d "box_subject_type=user"  \
     -d "box_subject_id=[APPUSER_ID]"

一般的なエラー

Grant credentials are invalid (許可の資格情報が無効です)

認証中に、次のエラーが表示される場合があります。

Grant credentials are invalid [400 Bad Request] invalid_grant - Grant credentials are invalid

このエラーは次のいずれかを示します。

  • 渡されたクライアントIDとクライアントシークレットが正しくないか、同じアプリケーションのものではない。

  • 選択したアプリケーションアクセスに基づいてbox_subject_idを使用できない。

[アプリアクセスのみ] が指定されているCCGアプリは、そのサービスアカウントとして認証するために送信時にbox_subject_typeenterpriseに設定できますが、管理対象ユーザーまたは管理者として認証できません。

  • box_subject_typeuserに設定して使用するには、[構成] タブの [高度な機能] セクションでユーザーアクセストークンを生成するようアプリケーションを構成する必要があります。

    アクセストークンの生成のチェックボックス

アプリの設定に変更を加えたら、忘れずに管理コンソールでアプリケーションを再承認してください。

  • アプリケーションがBox管理コンソールで承認されていない