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

# リソース所有者のパスワードフローを移行する

> パスワードAPI呼び出しと応答を/oauth/roから/oauth/tokenに移行する方法について説明します。

リソース所有者のパスワードのサポートが`/oauth/token`に追加されました。`/oauth/ro`エンドポイントの使用は2017年7月8日に廃止されました。`/oauth/ro`エンドポイントは、IDトークンやアクセストークンのためにエンドユーザーがメールまたはSMSで受信するワンタイムパスワード（OTP）のやり取りに使用されていました。Auth0にはこのユースケースの`/oauth/ro`に代わる新しいAPIが実装されているため、その新しいエンドポイントの使用をお勧めします。

## 影響のある機能

この変更がユーザーに影響するのは、[リソース所有者のパスワードフロー](/docs/ja-jp/get-started/authentication-and-authorization-flow/resource-owner-password-flow)（リソース所有者のパスワード付与またはROPGとも呼ばれる）を使用していて、Auth0ライブラリーやSDKを使わずに`/oauth/ro`を直接呼び出す場合です。LockやAuth0.jsなどのAuth0ライブラリーは、内部で`/oauth/ro`を使用しないように更新されました。lock-<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-jp/glossary?term=passwordless" tip="パスワードレス: 最初の要素としてパスワードに依存しない認証の形式。" cta="用語集の表示">passwordless</Tooltip>ライブラリーでは、その代わりに、Lockでパスワードレスモードが使用できるようになりました。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  ユーザーの`/oauth/ro`ベースのアクセストークンが期限切れになると、強制的に再認証が行われます（強制ログアウトが必要）。これは、`/oauth/ro`のリフレッシュトークンでは、`/oauth/token`を呼び出して新しいアクセストークンを取得することができないからです。`/oauth/ro`から`/oauth/token`への移行時に、ログインしているユーザーはすべてログアウトしなければなりません。
</Callout>

## アクション

### 更求での変更

これまで、`/oauth/ro`への要求には、以下のようなペイロードが含まれていました。

```javascript lines theme={null}
{
      "grant_type": "password",
      "client_id": "123",
      "username": "alice",
      "password": "A3ddj3w", 
      "connection": "my-database-connection",
      "scope": "openid email favorite_color offline_access",
      "device": "my-device-name"
    }
```

新しい実装には、以下のような変更があります。

* トークン交換を実行するエンドポイントは`/oauth/token`になりました。
* Auth0独自の付与タイプは、特定の接続（またはレルム）からユーザーを認証するために使用されます。
* Auth0では、カスタムAPIで定義されたスコープの他に、標準OIDCスコープがサポートされます。
* 上記の`favorite_color`など、これらのどのカテゴリーにも該当しないスコープは、有効なスコープではなくなりました。
* `device`パラメーターは削除されました。
* `audience`パラメーターは任意です。

以下は、`/oauth/token`への要求のペイロードの例です。

```javascript lines theme={null}
{
      "grant_type": "http://auth0.com/oauth/grant-type/password-realm",
      "client_id": "123",
      "username": "alice",
      "password": "A3ddj3w",
      "realm": "my-database-connection",
      "scope": "openid email offline_access",
      "audience": "https://api.example.com"
    }
```

* ここでは、付与タイプは標準の`password`でなく、`password-realm`として指定されています。
* `client_id`、`username`と`password`パラメーターに変更はありません。
* パスワードレルムの付与タイプを使用しているため、`realm`が含まれています。これが、前の呼び出しで取得した`connection`パラメーターで置き換えられます。
* `scope`パラメーターはほとんど同じですが、OIDC以外の値は受け入れません。
* `audience`パラメーターは追加して、トークンの対象であるAPIオーディエンスを示すことができます。

### 応答での変更

`/oauth/ro`からの応答は、以下のような形式になります。

```javascript lines theme={null}
{
      "access_token": "SlAV32hkKG",
      "token_type": "Bearer",
      "refresh_token": "8xLOxBtZp8",
      "expires_in": 3600,
      "id_token": "eyJ..."
    }
```

* 返されるアクセストークンは、`/userinfo`エンドポイント（`audience`パラメーターで指定のAPIにRS256を署名アルゴリズムが使われている場合）と任意のカスタムAPI（指定されている場合）の呼び出しに使用できます。
* IDトークンは、パブリッククライアントに要求されると、RS256を使用して強制的に署名されます。
* リフレッシュトークンは、`offline_access`スコープが付与され、APIに **［Allow offline access（オンラインでのアクセスを許可する）］** が設定されている場合にのみ返されます。

以下は、`/oauth/token`から返されたOIDC準拠の応答の例です。

```javascript lines theme={null}
{
      "access_token": "eyJ...",
      "token_type": "Bearer",
      "refresh_token": "8xLOxBtZp8",
      "expires_in": 3600,
      "id_token": "eyJ..."
    }
```

### 移行を確認する

1. コードベースを移行し、アプリがエンドポイントを呼び出していないことを確認したら、[［Dashboard］>［Tenant Settings（テナント設定）］>［Advanced（詳細）］](https://manage.auth0.com/#/tenant/advanced)に移動します。
2. **［Migrations（移行）］** まで下へスクロールして、 **［Legacy** `/oauth/ro` **Endpoint（レガシー/oauth/roエンドポイント）］** をオフにします。このスイッチをオフにすると、廃止されたエンドポイントがテナントで無効となり、使用を防ぐことができます。

このスイッチをオフにしてログインできなくなった場合は、レガシーコードの全インスタンスがアプリケーションからまだ完全に削除されていません。

移行が運用環境で正常に動作している場合には、このスイッチをオフにしたままにできます。これで、廃止された機能は今後使用されることがなくなります。
