影響を受ける機能
-
Authorizationヘッダーでは ID トークンを使用できなくなりました。代わりにアクセストークンを使用する必要があります。 -
Authorizationヘッダーで、付与された権限がupdate:usersのアクセストークンを使用する場合、リクエストの本文にはセカンダリアカウントのuser_idまたは ID トークンのいずれかを送信できます。 -
Authorizationヘッダーで、付与された権限がupdate:current_user_metadataのアクセストークンを使用する場合、リクエストの本文にはセカンダリアカウントの ID トークンのみを送信できます。 -
リクエストの本文にセカンダリアカウントの ID トークンを送信する場合 (前の 2 つの箇条書きで説明したユースケース) 、次の条件を満たす必要があります。
- ID トークンは
RS256で署名されている必要があります (この値は Auth0 Dashboard > クライアント > Client Settings > Advanced Settings > OAuth で設定できます。 - ID トークンの
audクレームはクライアントを識別するものであり、アクセストークンのazpクレームと同じ値である必要があります。
- ID トークンは
-
アカウントのリンク解除では、
Authorizationヘッダーで ID トークンを使用できなくなりました。代わりにアクセストークンを使用する必要があります。
Actions
- クライアント側 / ユーザー主導のリンクのシナリオ: クライアント側のリンクシナリオでは、
update:current_user_identitiesスコープ を持つ アクセストークン を使用して Identities endpoint を呼び出し、ペイロード (link_with) にセカンダリアカウントの ID トークンを指定します。この ID トークンは、/OIDC-conformant フローを通じて取得する必要があります。 - サーバー側のリンクのシナリオ: サーバー側のリンクシナリオでは、
update:usersスコープ を持つ アクセストークン を使用して Identities endpoint を呼び出し、ペイロード にセカンダリアカウントのuser_idを指定します。
ユーザーアカウントをリンクする
Management API で現在のユーザーアカウントをリンクする
update:current_user_identities スコープを含む) を使用し、ユーザーアカウントをリンクするエンドポイントを利用できました。
現在は、アクセストークン (update:current_user_identities スコープを含む) を取得し、それを使って API で認証したうえで、ユーザーアカウントをリンクするエンドポイントを利用する必要があります。ペイロード には、セカンダリユーザーの ID トークンを指定する必要があります。
-
次の例のように、
update:current_user_identitiesスコープを持つアクセストークンを取得します。この例では implicit flow を使用していますが、どのアプリケーションタイプでも アクセストークンを取得する ことができます。 - 以前の ID トークンを使う方法では、コードは次のようになります。 新しいアクセストークンを使う方法では、コードは次のようになります。
-
Management API にアクセスできるアクセストークンを取得するには:
-
audienceをhttps://{yourDomain}/api/v2/に設定します。 -
scopeとして${scope}を要求します。 -
response_typeをid_token tokenに設定し、Auth0 が ID トークンとアクセストークンの両方を送信するようにします。 アクセストークンをデコードして内容を確認すると、次のようになります。audにはテナントの API URI、scopeには${scope}、subにはログイン中のユーザー ID が設定されていることがわかります。
-
-
次の条件を満たしている必要があります。
- セカンダリアカウントの ID トークンは
RS256で署名されている必要があります。 - セカンダリアカウントの ID トークン内の
audクレームはクライアントを識別している必要があり、リクエストに使用するアクセストークンのazpクレームと同じ値である必要があります。
- セカンダリアカウントの ID トークンは
-
アクセストークンを取得したら、それを使ってユーザーアカウントをリンクできます。この部分は変わらず、リクエストで変わるのは
Bearerトークンとして使用する値だけです。レスポンスも同じです。
auth0.js で現在のユーザーアカウントをリンクする
auth0.Management をインスタンス化し、それを使ってアカウントをリンクしていることが多いでしょう。
-
update:current_user_identitiesスコープ を含む アクセストークン を取得し、そのトークンを使ってauth0.Managementをインスタンス化します。最後のlinkUserの呼び出しはこれまでと同じです。 -
従来の ID トークンを使用する方法では、コードは次のようになります。
新しい アクセストークン を使用する方法では、コードは次のようになります。
- レスポンスとして ID トークンと アクセストークン の両方を要求します (
responseType: `token id_token`)。 - トークンの対象 audience として Management API を設定します (
audience: `https://YOUR_DOMAIN/api/v2/`)。 - 必要な permission を要求します (
scope: `update:current_user_identities`)。 - アクセストークン を使用して Management API に対して認証します。
- レスポンスとして ID トークンと アクセストークン の両方を要求します (
Management API を使用して任意のユーザーアカウントをリンクする
update:users スコープを含むアカウントリンク用のアクセストークンを取得し、セカンダリアカウントの user_id と provider をリクエストで送信している場合は、何も変更する必要はありません。
ただし、この新しい方法では、これとは別の方法も利用できます。引き続き、API で認証するには update:users スコープを含むアクセストークンを使用しますが、リクエストのペイロードでは、user_id と provider の代わりに、セカンダリアカウントの ID トークンを送信できます。
Auth0 CLI を使用していますか?まだの場合は、このコマンドを実行する前に、CLI セッションを設定して認証してください。
- セカンダリ アカウントの ID トークン は、
RS256で署名されている必要があります。 - セカンダリ アカウントの ID トークン の
audクレームはクライアントを識別する必要があり、リクエストの実行に使用するアクセストークンのazpクレームと同じ値でなければなりません。
ユーザーアカウントのリンク解除
-
まず、
update:current_user_identitiesscope を持つアクセストークンを取得する必要があります。 - 以前の ID トークンを使う方法では、コードは次のようになります。 新しいアクセストークンを使う方法では、コードは次のようになります。
-
Management API にアクセスできるアクセストークンを取得するには:
-
audienceをhttps://{yourDomain}/api/v2/に設定します。 -
scopeに${scope}を指定します。 -
response_typeをid_token tokenに設定すると、Auth0 から ID トークンとアクセストークンの両方が返されます。 アクセストークンをデコードして内容を確認すると、次のようになります。audにはテナントの API URI が、scopeにはupdate:current_user_identitiesが、subにはログインしているユーザーのユーザー ID が設定されていることに注目してください。
-
-
アクセストークンを取得したら、それを
Authorizationヘッダーに指定して、Management API の Unlink a user identity endpoint を呼び出すことができます。 -
以前の方法での呼び出しは、次のようになります。
新しい方法での呼び出しは、次のようになります。
セキュリティに関する考慮事項
update:current_user_identities を持つトークン (ID トークンまたはアクセストークン) を使用して呼び出し、かつペイロードにセカンダリアカウントの user_id を含めている場合は、影響を受けます。その他のユースケースには影響ありません。