# Standard アカウントでの OAuth の使用

OAuth 連結フローを使用して Stripe ユーザーがプラットフォームに連結できるようにします。

新しい *Connect* (Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients) プラットフォームには OAuth の使用は推奨されていません。代わりに、[Standard アカウントの Connect オンボーディング](https://docs.stripe.com/connect/standard-accounts.md)を使用することをお勧めします。

2021 年 6 月から、`read_write` の範囲で OAuth を使用しているプラットフォームは、別のプラットフォームで管理されている Standard アカウントに接続できなくなります。

[Extensions](https://docs.stripe.com/building-extensions.md) では、OAuth の動作に変更はありません。プラットフォームが管理する Standard アカウントの [OAuth の変更](https://docs.stripe.com/connect/oauth-changes-for-standard-platforms.md)について、詳細をご確認ください。

## OAuth 連結フロー

ユーザは次の OAuth 連結フローを使用してプラットフォームに連結します。

1. お客様のサイトのページから、Stripe にリダイレクトされる[リンク](https://docs.stripe.com/connect/oauth-standard-accounts.md#integrating-oauth)をユーザがクリックすると、プラットフォームの `client_id` が渡されます。
2. Stripe のウェブサイトで、ユーザーはプラットフォームへの[接続](https://docs.stripe.com/connect/oauth-standard-accounts.md#connect-users)に必要な情報を入力します。
3. ユーザは認証コードとともにお客様のサイトに[リダイレクト](https://docs.stripe.com/connect/oauth-standard-accounts.md#redirected)されます。
4. 次に、接続を完了してユーザーのアカウント ID を取得するため、Stripe の [OAuth トークンエンドポイント](https://docs.stripe.com/connect/oauth-standard-accounts.md#token-request)にリクエストを送信します。

> プラットフォームでは、アカウント向けに作成したデータ (請求金額、顧客、*請求書* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice)など) が、顧客の Stripe アカウントに表示される点に注意してください。これにより、そのユーザーが他のプラットフォームに連結した場合、それらのプラットフォームにもそのデータが表示されるようになります。

## OAuth リンクを作成する

このガイドを使用して、コードを使用して連結アカウントを作成する方法を確認します。まだ導入する準備ができていない場合は、[ダッシュボードから](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md)連結アカウントの作成を開始できます。

連携を開始するには、[Connect OAuth アカウント登録オプション](https://dashboard.stripe.com/settings/connect/onboarding-options/oauth)に移動し、以下を実行します。

- [OAuth 設定](https://dashboard.stripe.com/settings/connect/onboarding-options/oauth)で OAuth を使用したアカウント登録を有効にします。
- `client_id`(Stripe によって生成されるプラットフォームの一意の ID) をコピーします。
- ユーザーがアカウントの連結後にリダイレクトされる URL である、`redirect_uri` を設定します。プラットフォームの設定にあるすべてのリダイレクト URL を指定する必要があります。リクエストに `redirect_uri` パラメータを含めなかった場合、Stripe はプラットフォームの設定で最初に設定したアドレスがデフォルトとして使用されます。

また Stripe は、[テスト](https://docs.stripe.com/connect/testing.md#using-oauth)をサポートする [client_id](https://dashboard.stripe.com/test/settings/connect/onboarding-options/oauth) も提供しています。`client_id` は、本番 ID またはテスト ID のいずれかです。サンドボックス用の `client_id` を使用してサンドボックスアカウントに接続することもできます。

これらの情報を入手したら、OAuth リンクを作成できます。ユーザーを `authorize_url` エンドポイントに誘導する **Stripe と連結する**ボタンを表示させることをお勧めします。

```url
https://connect.stripe.com/oauth/authorize?response_type=code&client_id=ca_FkyHCg7X8mlvCUdMDao4mMxagUfhIwXb&scope=read_write
```

Stripe エンドポイントは、少なくとも次の 3 つのパラメータを受け入れる必要があります。

1. **code** の値を含む `response_type`
2. `client_id`
3. **read\_write** の値を含む `scope`

`scope` パラメータは、連結アカウントの代理としてプラットフォームが実行できることを指定します。デフォルトは **read\_only** に設定されています。

CSRF 攻撃を防止するには、値として一意のトークンを渡して、`state` パラメーターを追加します。ユーザーをお客様のサイトにリダイレクトする際に指定した `state` を含めます。サイトでは、`state` パラメーターが変更されていないことを確認する必要があります。

[Connect with Stripe (Stripe に連結) ボタン](https://d37ugbyn3rpeym.cloudfront.net/docs/connect/Connect-with-Stripe-button.zip)とともに、上記の URL をユーザに提示して連結を開始する方法です。

### OAuth パラメーターを使用してアカウント登録をカスタマイズする

アカウント登録フローの動作を変更するには、追加の URL パラメーターを OAuth リンクに加えます。使用できるパラメーターの一覧については、[OAuth リファレンス](https://docs.stripe.com/connect/oauth-reference.md)をご覧ください。

## ユーザがアカウントを作成または連結する

サイト上のリンクをクリックすると、Stripe のウェブサイトに移動し、プラットフォームへの接続を許可または拒否するよう求められます。

Stripe アカウントを作成するプロセスは、認証フローに組み込まれています。ユーザがすでにアカウントを持っているかどうかを心配する必要はありません。
![](https://b.stripecdn.com/docs-statics-srv/assets/oauth-select-account.536d5cf58d244be2ff9723b78c4817e8.png)

ユーザはログインしており、プラットフォームに直接連結するためのアカウントを選択できます。
![](https://b.stripecdn.com/docs-statics-srv/assets/oauth-register.fa953a975b7eb6112dddf8faaff24f67.png)

ユーザはアカウントを作成する必要があります。

## ユーザがお客様のサイトにリダイレクトされる

ユーザーが既存または新規のアカウントをプラットフォームに連結すると、顧客は再度お客様のサイト (プラットフォームの `redirect_uri` に規定されている URL) にリダイレクトされます。

連結に成功すると、次の値が URL に渡されます。

- 付与された `scope`
- `state` 値 (指定されている場合)
- 認証コード。認証コードは一時的なコードであり、次のステップで説明する POST リクエスト内で 1 回のみ使用できます。

```url
https://connect.stripe.com/connect/default/oauth/test?scope=read_write&code={AUTHORIZATION_CODE}
```

ユーザが認証を拒否した場合でも、お客様のサイトにリダイレクトされますが、URL には認証コードではなくエラーが含まれます。

```url
https://connect.stripe.com/connect/default/oauth/test?error=access_denied&error_description=The%20user%20denied%20your%20request
```

## プラットフォームがアカウントの連結を完了する

接続を完了してユーザーのアカウント ID を取得するには、発行された認可 `code` を Stripe トークンエンドポイントへの POST リクエストに含めてください。

#### curl

```bash
curl https://connect.stripe.com/oauth/token \
  -u <<YOUR_SECRET_KEY>>: \
  -d "code"="ac_123456789" \
  -d "grant_type"="authorization_code"
```

本番またはテスト用のシークレット API キーを使用してリクエストを送信します。本番またはテスト用のアクセストークンのどちらを取得するかに応じて、使用するキーを選択してください。

Stripe はユーザのアカウント ID (`stripe_user_id`) を含むレスポンスを返します。

```json
{
  "token_type": "bearer",
  "scope": "read_write",
  "livemode": false,
  "stripe_user_id": ""{{CONNECTED_ACCOUNT_ID}}""
}
```

問題が発生した場合は、代わりにエラーが返されます。

```json
{
  "error": "invalid_grant",
  "error_description": "Authorization code does not exist: {AUTHORIZATION_CODE}"
}
```

完了です。これで、ユーザはプラットフォームに連結されました。`stripe_user_id` をデータベースに保存します。これは、新しいアカウントの Stripe アカウント ID です。この値を使用して、`Stripe-Account` ヘッダでリクエストに渡して、連結アカウントとして[認証](https://docs.stripe.com/connect/authentication.md)します。

アプリケーションでは、専用の OAuth クライアントライブラリを使用してこれらの手順の簡素化を検討することをお勧めします。ご使用の言語またはフレームワークの OAuth ライブラリを確認するには、OAuth Web サイトの[クライアントライブラリのリスト](https://oauth.net/code/)をご覧ください。

`refresh_token` は、本番環境での `client_id` の[テスト用アクセストークンの生成](https://docs.stripe.com/connect/testing.md#creating-accounts)や、アクセストークンのロールに使用できます。最初の POST リクエストの後でしか取得できないため、この値も保持する必要があります。

> **受け取ったアカウント ID は保存してください。** プラットフォームがユーザの代わりにリクエストを実行するには、この情報が必要です。

## 取り消し後または取り消し中のアクセス

ユーザーがアカウントからプラットフォームの連結を解除すると、`account.application.deauthorized` [イベント](https://docs.stripe.com/api.md#list_events)が発生します。[Webhook](https://docs.stripe.com/connect/webhooks.md) でこのイベントを監視することにより、必要に応じて、サーバーでクリーンアップを実行できるようになります。

プラットフォームから Stripe ダッシュボードにアクセスできるアカウントの連結を解除するには、お客様の `client_id` と、連結アカウントの ID を `connect.stripe.com/oauth/deauthorize` に POST します。

#### curl

```bash
curl https://connect.stripe.com/oauth/deauthorize \
  -u <<YOUR_SECRET_KEY>>: \
  -d client_id="ca_FkyHCg7X8mlvCUdMDao4mMxagUfhIwXb" \
  -d stripe_user_id=acct_ON3nXtRQkhmUIQ
```

ユーザーの代わりに API を使用して、決済の受け付け、継続請求の設定、アカウントデータの取得などを実行できます。

## See also

- [認証](https://docs.stripe.com/connect/authentication.md)
- [OAuth リファレンス](https://docs.stripe.com/connect/oauth-reference.md)
- [API リファレンス完全版](https://docs.stripe.com/api.md)
