> ## 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.

# SDKを使用したOAuth 2.0

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>;
};

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

<RelatedLinks
  title="必須のガイド"
  items={[
{ label: translate("Box SDKs"), href: "/guides/tooling/sdks/index", badge: "GUIDE" },
{ label: translate("Select Auth Method"), href: "/guides/authentication/select", badge: "GUIDE" },
{ label: translate("Setup with OAuth 2.0"), href: "/guides/authentication/oauth2/oauth2-setup", badge: "GUIDE" }
]}
/>

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

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

## 概要

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

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

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

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

## パラメータ

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

## 1. SDKを構成する

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

<CodeGroup>
  ```csharp .NET theme={null}
  var redirectUrl = "[REDIRECT_URI]";
  var config = new BoxConfig("[CLIENT_ID]", "[CLIENT_SECRET]", new Uri(redirectUrl));
  var sdk = new BoxClient(config);
  ```

  ```java Java theme={null}
  import com.box.sdk.BoxAPIConnection;

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

  ```python Python theme={null}
  from boxsdk import OAuth2, Client

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

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

  var sdk = new BoxSDK({
      clientID: "[CLIENT_ID]",
      clientSecret: "[CLIENT_SECRET]",
  });
  ```
</CodeGroup>

<Card href={localizeLink("/guides/tooling/sdks")} arrow title="ご利用の環境に合わせたSDKのインストールの詳細を確認する" />

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

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

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

<CodeGroup>
  ```csharp .NET theme={null}
  var authorizationUrl = "https://account.box.com/api/oauth2/authorize?client_id=[CLIENT_ID]&response_type=code";
  // redirectTo(authorizationUrl);
  ```

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

  // response.redirect(authorizationUrl);
  ```

  ```python Python theme={null}
  auth_url, csrf_token = auth.get_authorization_url('[REDIRECT_URL]')

  // redirect(auth_url, code=302)
  ```

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

  // res.redirect(authorize_url)
  ```
</CodeGroup>

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

<Link href="/reference/get-authorize">承認URL</Link>は、以下のように手動でも作成できます。

```sh theme={null}
https://account.box.com/api/oauth2/authorize?client_id=[CLIENT_ID]&redirect_uri=[REDIRECT_URI]&response_type=code
```

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

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

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

<Frame border center shadow width="400">
  <img src="https://mintcdn.com/box/ozetuUHA5lVSDzR-/ja/guides/authentication/oauth2/oauth2-grant.png?fit=max&auto=format&n=ozetuUHA5lVSDzR-&q=85&s=46bf43329ee2cedf4310863e7f3b8165" alt="OAuth 2.0承認画面の例" width="796" height="890" data-path="ja/guides/authentication/oauth2/oauth2-grant.png" />
</Frame>

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

## 4. コードを交換する

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

```sh theme={null}
https://your.domain.com/path?code=1234567
```

このコードは<Link href="/guides/authentication/tokens/access-tokens">アクセストークン</Link>ではなく、有効期間はほんの数秒です。SDKを使用すると、このコードを実際のアクセストークンと交換できます。

<CodeGroup>
  ```csharp .NET theme={null}
  var session = await sdk.Auth.AuthenticateAsync("[CODE]");
  var client = new BoxClient(config, session);
  ```

  ```java Java theme={null}
  BoxAPIConnection client = new BoxAPIConnection(
      "[CLIENT_ID]",
      "[CLIENT_SECRET]",
      "[CODE]"
  );
  ```

  ```python Python theme={null}
  auth.authenticate('[CODE]')
  client = Client(auth)
  ```

  ```js Node theme={null}
  var code = "...";

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

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

## SDKとOAuth 2.0の使用

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

* [.Net][.Net]
* [Java][Java]
* [Python][Python]
* [Node][Node]
* [IOS][IOS]

[.Net]: https://github.com/box/box-windows-sdk-v2/blob/legacy/docs/authentication.md#traditional-3-legged-oauth2

[Java]: https://github.com/box/box-java-sdk/blob/legacy/doc/authentication.md#standard-3-legged-oauth-20

[Python]: https://github.com/box/box-python-sdk/blob/legacy/docs/usage/authentication.md#traditional-3-legged-oauth2

[Node]: https://github.com/box/box-node-sdk/blob/legacy/docs/authentication.md#traditional-3-legged-oauth2

[IOS]: https://github.com/box/box-ios-sdk/blob/legacy/BoxSDK/docs/usage/authentication.md#traditional-3-legged-oauth2

[1]: https://support.box.com/hc/ja/articles/360043693554-Box-Verified-Enterpriseとサポート対象のアプリ

<RelatedLinks
  title="関連するAPI"
  items={[
{ label: translate("Authorize user"), href: "/reference/get-authorize", badge: "GET" }
]}
/>

<RelatedLinks
  title="関連するガイド"
  items={[
{ label: translate("Platform App"), href: "/guides/applications/platform-apps/index", badge: "GUIDE" },
{ label: translate("Select Auth Method"), href: "/guides/authentication/select", badge: "GUIDE" },
{ label: translate("Setup with OAuth 2.0"), href: "/guides/authentication/oauth2/oauth2-setup", badge: "GUIDE" }
]}
/>
