Skip to main content
これまで、一部のユースケースでは、ユーザーアカウントのリンクやリンク解除に を使用できました。Auth0 では、この機能を非推奨化しています。今後は、すべてのケースで を使用する必要があります。
この非推奨化は、潜在的なセキュリティ脆弱性への対応として行われるものです。Auth0 は、できるだけ早くコードを更新することを強く推奨しています。

影響を受ける機能

アカウントリンクに関する変更点は次のとおりです。
  • 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 クレームと同じ値である必要があります。
  • アカウントのリンク解除では、Authorization ヘッダーで ID トークンを使用できなくなりました。代わりにアクセストークンを使用する必要があります。
アカウントをリンクおよびリンク解除する方法はいくつかあります。以下のリストでは、ユースケースと、それぞれが今回の変更によってどのような影響を受けるかを確認できます。

Actions

アカウントリンク用の Identities endpoint へのすべての呼び出しを確認し、上述の脆弱なフローを利用しているものを更新してください。呼び出しは、次のいずれかの方法に更新できます。
  • クライアント側 / ユーザー主導のリンクのシナリオ: クライアント側のリンクシナリオでは、update:current_user_identities スコープ を持つ アクセストークン を使用して Identities endpoint を呼び出し、ペイロード (link_with) にセカンダリアカウントの ID トークンを指定します。この ID トークンは、/OIDC-conformant フローを通じて取得する必要があります。
  • サーバー側のリンクのシナリオ: サーバー側のリンクシナリオでは、update:users スコープ を持つ アクセストークン を使用して Identities endpoint を呼び出し、ペイロード にセカンダリアカウントの user_id を指定します。
詳しくは、Link User Accounts を参照してください。 ユーザーアカウントをリンクするには、ユーザーアカウントをリンクするエンドポイントを呼び出すか、auth0.js ライブラリを使用します。 よくあるユースケースとして、ログイン中のユーザーがアプリを使って自分のアカウントをリンクできるようにすることが挙げられます。 非推奨化以前は、Management API で認証するために、プライマリユーザーの ID トークンまたはアクセストークン (update:current_user_identities スコープを含む) を使用し、ユーザーアカウントをリンクするエンドポイントを利用できました。 現在は、アクセストークン (update:current_user_identities スコープを含む) を取得し、それを使って API で認証したうえで、ユーザーアカウントをリンクするエンドポイントを利用する必要があります。ペイロード には、セカンダリユーザーの ID トークンを指定する必要があります。
  1. 次の例のように、update:current_user_identities スコープを持つアクセストークンを取得します。この例では implicit flow を使用していますが、どのアプリケーションタイプでも アクセストークンを取得する ことができます。
  2. 以前の ID トークンを使う方法では、コードは次のようになります。 新しいアクセストークンを使う方法では、コードは次のようになります。
  3. Management API にアクセスできるアクセストークンを取得するには:
    1. audiencehttps://{yourDomain}/api/v2/ に設定します。
    2. scope として ${scope} を要求します。
    3. response_typeid_token token に設定し、Auth0 が ID トークンとアクセストークンの両方を送信するようにします。 アクセストークンをデコードして内容を確認すると、次のようになります。 aud にはテナントの API URI、scope には ${scope}sub にはログイン中のユーザー ID が設定されていることがわかります。
  4. 次の条件を満たしている必要があります。
    1. セカンダリアカウントの ID トークンは RS256 で署名されている必要があります。
    2. セカンダリアカウントの ID トークン内の aud クレームはクライアントを識別している必要があり、リクエストに使用するアクセストークンの azp クレームと同じ値である必要があります。
  5. アクセストークンを取得したら、それを使ってユーザーアカウントをリンクできます。この部分は変わらず、リクエストで変わるのは Bearer トークンとして使用する値だけです。レスポンスも同じです。
auth0.js library を使用して Management API にアクセスし、アカウントをリンクしている場合は、ユーザーのプライマリ ID の ID トークンを使って auth0.Management をインスタンス化し、それを使ってアカウントをリンクしていることが多いでしょう。
  1. update:current_user_identities スコープ を含む アクセストークン を取得し、そのトークンを使って auth0.Management をインスタンス化します。最後の linkUser の呼び出しはこれまでと同じです。
  2. 従来の ID トークンを使用する方法では、コードは次のようになります。 新しい アクセストークン を使用する方法では、コードは次のようになります。
    1. レスポンスとして ID トークンと アクセストークン の両方を要求します (responseType: `token id_token`)。
    2. トークンの対象 audience として Management API を設定します (audience: `https://YOUR_DOMAIN/api/v2/`)。
    3. 必要な permission を要求します (scope: `update:current_user_identities`)。
    4. アクセストークン を使用して Management API に対して認証します。
update:users スコープを含むアカウントリンク用のアクセストークンを取得し、セカンダリアカウントの user_idprovider をリクエストで送信している場合は、何も変更する必要はありません。 ただし、この新しい方法では、これとは別の方法も利用できます。引き続き、API で認証するには update:users スコープを含むアクセストークンを使用しますが、リクエストのペイロードでは、user_idprovider の代わりに、セカンダリアカウントの ID トークンを送信できます。
Auth0 CLI を使用していますか?まだの場合は、このコマンドを実行する前に、CLI セッションを設定して認証してください
以下の条件が適用されます:
  • セカンダリ アカウントの ID トークン は、RS256 で署名されている必要があります。
  • セカンダリ アカウントの ID トークン の aud クレームはクライアントを識別する必要があり、リクエストの実行に使用するアクセストークンの azp クレームと同じ値でなければなりません。
アカウントのリンク解除に ID トークンを使用している場合は、アクセストークンを使うようにコードを更新する必要があります。
  1. まず、update:current_user_identities scope を持つアクセストークンを取得する必要があります。
  2. 以前の ID トークンを使う方法では、コードは次のようになります。 新しいアクセストークンを使う方法では、コードは次のようになります。
  3. Management API にアクセスできるアクセストークンを取得するには:
    1. audiencehttps://{yourDomain}/api/v2/ に設定します。
    2. scope${scope} を指定します。
    3. response_typeid_token token に設定すると、Auth0 から ID トークンとアクセストークンの両方が返されます。 アクセストークンをデコードして内容を確認すると、次のようになります。 aud にはテナントの API URI が、scope には update:current_user_identities が、sub にはログインしているユーザーのユーザー ID が設定されていることに注目してください。
  4. アクセストークンを取得したら、それを Authorization ヘッダーに指定して、Management API の Unlink a user identity endpoint を呼び出すことができます。
  5. 以前の方法での呼び出しは、次のようになります。
    新しい方法での呼び出しは、次のようになります。

セキュリティに関する考慮事項

特定のアカウントリンクのフローに脆弱性があることを確認しており、特定の状況では悪用される可能性があります。これが悪意をもって利用された証拠は見つかっていませんが、そのような事態を未然に防ぐため、このフローを非推奨とすることを決定しました。 そのため、影響を受けるアカウントリンクのフローを使用している Auth0 のお客様は、2018 年 10 月 19 日までに、より安全な実装へ移行する必要があります。移行方法はこのガイドで案内しており、機能が失われることはありません。 2018 年 10 月 19 日以降、影響を受けるアカウントリンクのフローは無効化され、実行時エラーが発生します。 Post Identities endpoint を、Authorization ヘッダーでスコープ update:current_user_identities を持つトークン (ID トークンまたはアクセストークン) を使用して呼び出し、かつペイロードにセカンダリアカウントの user_id を含めている場合は、影響を受けます。その他のユースケースには影響ありません。

詳しくはこちら