> ## Documentation Index
> Fetch the complete documentation index at: https://developer.box.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 設定

export const Link = ({href, children, className, ...props}) => {
  const localizedHref = localizeLink(href);
  return <a href={localizedHref} className={className} {...props}>
      {children}
    </a>;
};

export const MultiRelatedLinks = ({sections = []}) => {
  if (!sections || sections.length === 0) {
    return null;
  }
  return <div className="space-y-8">
      {sections.map((section, index) => <RelatedLinks key={index} title={section.title} items={section.items} />)}
    </div>;
};

export const RelatedLinks = ({title, items = []}) => {
  const getBadgeClass = badge => {
    if (!badge) return "badge-default";
    const badgeType = badge.toLowerCase().replace(/\s+/g, "-");
    return `badge-${badge === "ガイド" ? "guide" : badgeType}`;
  };
  if (!items || items.length === 0) {
    return null;
  }
  return <div className="my-8">
      {}
      <h3 className="text-sm font-bold uppercase tracking-wider mb-4">{title}</h3>

      {}
      <div className="flex flex-col gap-3">
        {items.map((item, index) => <a key={index} href={item.href} className="py-2 px-3 rounded related_link hover:bg-[#f2f2f2] dark:hover:bg-[#111827] flex items-center gap-3 group no-underline hover:no-underline border-b-0">
            {}
            <span className={`px-2 py-1 rounded-full text-xs font-semibold uppercase tracking-wide flex-shrink-0 ${getBadgeClass(item.badge)}`}>
              {item.badge}
            </span>

            {}
            <span className="text-base">{item.label}</span>
          </a>)}
      </div>
    </div>;
};

Boxにファイルをアップロードし、Box Viewを使用してプレビューする前に、Box Platformアプリを作成し、サーバー認証用に構成する必要があります。

<Card href={localizeLink("/guides/applications/platform-apps/create#create-a-platform-app-2")} arrow title="Platformアプリの作成" />

## 認証方法の選択

Box Viewでは、任意のサーバー側認証方法を使用できます。お客様のニーズに適したものを選択してください。

<Warning>
  認証方法は作成後に変更できません。別の方法を使用する必要がある場合は、新しいアプリケーションを作成してください。
</Warning>

| メソッド                   | 最適な用途                | 主な特徴                            |
| ---------------------- | -------------------- | ------------------------------- |
| **クライアント資格情報許可 (CCG)** | Box Viewのほとんどのユースケース | 設定がシンプル。クライアントIDとシークレットを使用      |
| **JWT**                | 公開/秘密キーのセキュリティが必要な環境 | キーペアがベース。シークレットがネットワーク経由で共有されない |

どちらの方法もアプリケーションのサービスアカウントとして認証を行います。サービスアカウントはアップロードされたコンテンツをすべて所有しており、エンドユーザーのログインは必要ありません。

<Note>
  **アクセス制限付きアプリからの移行**: CCGおよびJWT Platformアプリは、アクセス制限付きアプリ (アプリトークン認証) でサポートされている150以上のエンドポイントをすべてサポートしています。ファイルのアップロード、ダウンロード、削除、プレビューのワークフローは同一です。詳細な比較については、[認証方法の選択ガイド](/guides/authentication/select)を参照してください。
</Note>

## アプリケーション設定の構成

アプリケーションを構成するには、[開発者コンソール](https://app.box.com/developers/console)でアプリケーションの \[**構成**] タブに移動して、次のオプションを設定します。

1. \[**アプリケーションアクセス**] で \[**アプリアクセスのみ**] を選択します。そうすることで、アプリケーションが固有のサービスアカウントコンテンツに制限されます。これは、Box Viewの標準的な構成です。
2. \[**アプリケーションスコープ**] で、少なくとも、以下のオプションを有効にします。
   * \[**Boxに格納されているすべてのファイルとフォルダの読み取り**] (root\_readonly)
   * \[**Boxに格納されているすべてのファイルとフォルダの読み取りと書き込み**] (root\_readwrite)
3. アプリケーションが (例えばBox UI Elementsを使用して) フロントエンドのブラウザコードからAPIコールを実行する場合は、\[**構成**] タブの下部にあるCORS許可リストにドメインを追加します。
4. \[**構成**] タブから資格情報をコピーします。
   * CCGの場合、\[**クライアントID**] と \[**クライアントシークレット**] をコピーします。シークレットを確認するには、[多要素認証](https://support.box.com/hc/en-us/articles/360043697154-Multi-Factor-Authentication-Set-Up-for-Your-Account)が必要です。
   * JWTの場合、公開/秘密キーペアを生成した後にJSON構成ファイルをダウンロードします。

## アプリケーションの承認

サーバーで認証されたPlatformアプリは、APIコールを実行する前に、管理者の承認が必要です。

1. [開発者コンソール](https://app.box.com/developers/console)で \[**承認**] タブに移動します。
2. \[**確認して送信**] をクリックします。企業のBox管理者には、管理コンソールでアプリケーションを承認するためのメールが送信されます。詳細については、[Platformアプリの承認ガイド](/guides/authorization/platform-app-approval)を参照してください。

<Warning>
  アプリが承認される前にAPIコールを実行しようとすると、次のエラーが表示されます: <code />
</Warning>

## アクセストークンの取得

アクセストークンを取得するプロセスは、アプリケーションの認証方法によって異なります。

### クライアント資格情報許可 (CCG) で認証されるPlatformアプリ

クライアントIDとクライアントシークレットをトークンエンドポイントに送信することで、アクセストークンをリクエストします。トークンはアプリケーションのサービスアカウントとして認証されます。

```sh cURL theme={null}
curl -X POST https://api.box.com/oauth2/token \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "grant_type=client_credentials" \
  -d "box_subject_type=enterprise" \
  -d "box_subject_id=YOUR_ENTERPRISE_ID"
```

レスポンスには、有効期間が約60分間のアクセストークンが含まれています。

```json Response theme={null}
{
  "access_token": "c3FIOG9vSGV4VHo4QzAy...",
  "expires_in": 4169,
  "restricted_to": [],
  "token_type": "bearer"
}
```

アプリケーションは現在のトークンの有効期限が切れる前に、新しいトークンをリクエストする必要があります。すべてのBox SDKはこれを自動的に処理します。

<CodeGroup>
  ```python Python theme={null}
  from box_sdk_gen import BoxClient, BoxCCGAuth, CCGConfig

  auth = BoxCCGAuth(
      config=CCGConfig(
          client_id="YOUR_CLIENT_ID",
          client_secret="YOUR_CLIENT_SECRET",
          enterprise_id="YOUR_ENTERPRISE_ID",
      )
  )
  client = BoxClient(auth=auth)
  ```

  ```js Node.js theme={null}
  const BoxSDK = require("box-node-sdk");

  const sdk = new BoxSDK({
    clientID: "YOUR_CLIENT_ID",
    clientSecret: "YOUR_CLIENT_SECRET",
  });

  const client = sdk.getCCGClientForEnterprise("YOUR_ENTERPRISE_ID");
  ```

  ```java Java theme={null}
  BoxCCGAPIConnection api = BoxCCGAPIConnection.applicationServiceAccountConnection(
      "YOUR_CLIENT_ID",
      "YOUR_CLIENT_SECRET",
      "YOUR_ENTERPRISE_ID"
  );
  ```

  ```csharp .NET theme={null}
  var config = new BoxConfigBuilder("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")
      .SetEnterpriseId("YOUR_ENTERPRISE_ID")
      .Build();
  var session = new BoxCCGAuth(config);
  var client = session.AdminClient();
  ```
</CodeGroup>

### JWTで認証されるPlatformアプリ

アプリケーションでJWT認証を使用している場合は、設定中にダウンロードしたJSON構成ファイルを使用します。

<CodeGroup>
  ```python Python theme={null}
  from box_sdk_gen import BoxClient, BoxJWTAuth, JWTConfig

  jwt_config = JWTConfig.from_config_file("/path/to/config.json")
  auth = BoxJWTAuth(config=jwt_config)
  client = BoxClient(auth=auth)
  ```

  ```js Node.js theme={null}
  const BoxSDK = require("box-node-sdk");
  const fs = require("fs");

  const configJSON = JSON.parse(fs.readFileSync("/path/to/config.json"));
  const sdk = BoxSDK.getPreconfiguredInstance(configJSON);
  const client = sdk.getAppAuthClient("enterprise");
  ```
</CodeGroup>

JWTの設定の詳細については、[JWT認証のガイド](/guides/authentication/jwt)を参照してください。

## クライアント側で使用するトークンのダウンスコープ

アクセストークンをブラウザに渡す必要がある場合は (例えば、Box Content Previewや他のBox UI Elementsを実行する場合)、必ず最初にトークンをダウンスコープしてください。ダウンスコープを行うと、新しいトークン用のフル権限を持つトークンが、制限付きの権限とファイルレベルのスコープ (省略可) に置き換えられます。

```sh cURL theme={null}
curl -X POST https://api.box.com/oauth2/token \
  -d "subject_token=YOUR_ACCESS_TOKEN" \
  -d "subject_token_type=urn:ietf:params:oauth:token-type:access_token" \
  -d "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
  -d "scope=item_preview" \
  -d "resource=https://api.box.com/2.0/files/FILE_ID"
```

ダウンスコープされたトークンは、有効期間が短く、指定されたスコープとファイルに制限されます。クライアント側のコードでは、元のアクセストークンの代わりに、このダウンスコープされたトークンを使用してください。

次の表には、Box Viewの一般的なダウンスコープ用のスコープを示しています。

| スコープ                               | 説明                                         |
| ---------------------------------- | ------------------------------------------ |
| <code>item\_preview</code>         | ファイルのプレビュー                                 |
| <code>item\_download</code>        | ファイルをダウンロード                                |
| <code>base\_preview</code>         | 基本的なプレビュー (Box Content Preview UI Element) |
| <code>annotation\_edit</code>      | 注釈の編集と削除                                   |
| <code>annotation\_view\_all</code> | すべての注釈の表示                                  |

ダウンスコープ用のスコープの詳細な一覧については、[スコープのガイド](/guides/api-calls/permissions-and-errors/scopes#scopes-for-downscoping)を参照してください。

## セキュリティのベストプラクティス

Platformアプリの安全性を確保するために、以下のガイドラインに従ってください。

* クライアントシークレットまたはアクセストークン全体をクライアント側のコードで公開しないようにしてください。トークンは、ブラウザに送信する前に常にダウンスコープします。
* 資格情報は安全に保存します。クライアントID、クライアントシークレット、Enterprise IDには、環境変数またはシークレットマネージャを使用してください。
* 企業全体でのコンテンツアクセスが特に必要でない限り、\[**アプリケーションアクセス**] は \[**アプリアクセスのみ**] に設定しておきます。
* 必要なCORSドメインのみを追加します。許可リストは、ブラウザ側のAPIコールを実際に実行するドメインに制限してください。

## 従来のアクセス制限付きアプリ

アクセス制限付きアプリでは、アプリトークン認証を使用します。アプリトークン認証では、開発者コンソールで手動で生成された、有効期間の長い固定のトークンペア (プライマリおよびセカンダリ) が提供されます。この方法は、プログラムによるトークン管理、自動更新、全Box APIへのアクセスが可能なCCGおよびJWT認証に置き換えられつつあります。既存のアクセス制限付きアプリを使用している場合は、以下の手順に従って、新しいCCGまたはJWT認証アプリにコンテンツを移行してください。

1. [上記の手順](/guides/embed/box-view/setup#choosing-an-authentication-method)に従って、CCGまたはJWTを使用する新しいPlatformアプリを作成します。
2. コンテンツを新しいアプリのサービスアカウントに再アップロードします。または、コラボレーションを使用して既存のコンテンツを共有します。
3. ハードコードされたアプリトークンを、プログラムによるCCGまたはJWTトークンの取得に置き換えます。
4. ダウンスコープされたトークンのコールを更新します。<code />フローは同じで、<code />の値のみが変わります。

ファイルのアップロード、プレビュー、埋め込みのワークフローは、認証方法に関係なく同じです。アクセストークンの交換以外に、iframeの埋め込みやBox UI Elementのコードに変更は必要ありません。

<RelatedLinks
  title="関連するガイド"
  items={[
{ label: translate("Upload Files"), href: "/guides/embed/box-view/upload-file", badge: "GUIDE" },
{ label: translate("Create File Preview"), href: "/guides/embed/box-view/create-preview", badge: "GUIDE" },
{ label: translate("Best Practices"), href: "/guides/embed/box-view/best-practices", badge: "GUIDE"},
{ label: translate("Setup with Client Credentials Grant"), href: "/guides/authentication/client-credentials/client-credentials-setup", badge: "GUIDE"},
{ label: translate("Setup with JWT"), href: "/guides/authentication/jwt/jwt-setup", badge: "GUIDE"},
{ label: translate("Downscope a Token"), href: "/guides/authentication/tokens/downscope", badge: "GUIDE"},
{ label: translate("Platform App Approval"), href: "/guides/authorization/platform-app-approval", badge: "GUIDE"}
]}
/>
