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

> Auth0 で、さまざまなアイデンティティプロバイダーのユーザーアカウントをリンクする方法について説明します。

# ユーザーアカウントのリンク

export const AuthCodeGroup = ({children, dropdown}) => {
  const [processedChildren, setProcessedChildren] = useState(children);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      unsubscribe = window.autorun(() => {
        const processChildren = node => {
          if (typeof node === "string") {
            let processedNode = node;
            for (const [key, value] of window.rootStore.variableStore.values.entries()) {
              const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
              processedNode = processedNode.replaceAll(new RegExp(escapedKey, "g"), value);
            }
            return processedNode;
          } else if (Array.isArray(node)) {
            return node.map(processChildren);
          } else if (node && node.props && node.props.children) {
            return {
              ...node,
              props: {
                ...node.props,
                children: processChildren(node.props.children)
              }
            };
          }
          return node;
        };
        setProcessedChildren(processChildren(children));
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  return <CodeGroup dropdown={dropdown}>{processedChildren}</CodeGroup>;
};

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Connected Accounts を使用すると、1 つの Auth0 ユーザープロファイルに複数の外部アカウントをリンクできます。サポート対象の外部プロバイダーで Connected Accounts を有効にすると、ユーザーが正常にログインした後、そのプロバイダーのアカウントがユーザープロファイルに自動的に追加されます。詳しくは、[Connected Accounts for Token Vault](/docs/ja-jp/secure/tokens/token-vault/connected-accounts-for-token-vault) をご覧ください。
</Callout>

Auth0 は、さまざまな <Tooltip tip="アイデンティティプロバイダー (IdP): デジタルアイデンティティを保存および管理するサービス。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=identity+providers">アイデンティティプロバイダー</Tooltip> のユーザーアカウントのリンクをサポートしています。これにより、ユーザーはどのアカウントで認証しても、アプリケーションでは同じユーザープロファイルに関連付けられた同一のユーザーとして認識されます。

<Card title="利用可否は Auth0 のプランによって異なります">
  この機能が利用可能かどうかは、ログインの実装方法と Auth0 のプランまたはカスタム契約の両方に左右されます。詳しくは、[Pricing](https://auth0.com/pricing) をご覧ください。
</Card>

Auth0 は、デフォルトではすべてのアイデンティティを別個のものとして扱います。たとえば、あるユーザーが最初に Auth0 データベースでログインし、その後 Google や Facebook 経由でログインした場合、Auth0 ではこれら 2 回のログインは別々の 2 人のユーザーとして認識されます。ユーザーが明示的にアカウントをリンクできるようにする機能は、自分で実装できます。このシナリオでは、ユーザーは最初のプロバイダー (たとえば Google) でログインします。次に、最初のアカウントに別のアカウントをリンクできるよう、アプリケーションでリンクまたはボタンを表示します。ユーザーがそのリンクまたはボタンをクリックすると、アプリケーションが必要な呼び出しを行い、ユーザーが 2 つ目のプロバイダーでログインした際に、その 2 つ目のアカウントが最初のアカウントにリンクされるようにします。

<div id="advantages-of-linking-accounts">
  ## アカウントをリンクするメリット
</div>

* ユーザーは、アイデンティティプロバイダーごとに別々のプロファイルを作成しなくても、どのアイデンティティプロバイダーでもログインできます
* 登録済みユーザーは、新しいソーシャルログインまたは<Tooltip tip="パスワードレス: 最初の認証要素としてパスワードに依存しない認証形式。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=passwordless">パスワードレス</Tooltip>ログインを使用しても、既存のプロファイルをそのまま利用できます
* パスワードレスログインで登録したユーザーは、より充実したプロファイルを持つアカウントにリンクできます
* アプリは、さまざまな接続に保存されているユーザープロファイルデータを取得できます

<div id="precautions">
  ## 注意事項
</div>

安全でない方法でアカウントをリンクすると、悪意のある第三者が正規のユーザーアカウントにアクセスできる可能性があります。次の点に注意してください。

手動、自動のいずれのアカウントリンクでも、リンクを行う前に、テナントで**両方**のアカウントに対する認証を要求する必要があります。

さらに、**すべての**手動アカウントリンクでは、ユーザーに資格情報の入力を求める必要があります。

<div id="how-it-works">
  ## 仕組み
</div>

アカウントのリンク処理では、既存の2つのユーザープロファイルが1つに統合されます。アカウントをリンクするには、**primary account** と **secondary account** を指定する必要があります。

以下の例は、サンプルの primary account と secondary account をリンクしたときに、結果のリンク済みプロファイルがどのようになるかを示しています。

<AuthCodeGroup>
  ```json primary account のプロファイル lines expandable theme={null}
  {
    "email": "your0@email.com",
    "email_verified": true,
    "name": "John Doe",
    "given_name": "John",
    "family_name": "Doe",
    "picture": "https://lh3.googleusercontent..../photo.jpg",
    "gender": "male",
    "locale": "en",
    "user_id": "google-oauth2|115015401343387192604",
    "identities": [
      {
        "provider": "google-oauth2",
        "user_id": "115015401343387192604",
        "connection": "google-oauth2",
        "isSocial": true
      }
    ],
    "user_metadata": {
      "color": "red"
    },
    "app_metadata": {
      "roles": [
        "Admin"
      ]
    },
    ...
  }
  ```

  ```json secondary account のプロファイル lines theme={null}
  {
    "phone_number": "+14258831929",
    "phone_verified": true,
    "name": "+14258831929",
    "updated_at": "2015-10-08T18:35:18.102Z",
    "user_id": "sms|560ebaeef609ee1adaa7c551",
    "identities": [
      {
        "user_id": "560ebaeef609ee1adaa7c551",
        "provider": "sms",
        "connection": "sms",
        "isSocial": false
      }
    ],
    "user_metadata": {
      "color": "blue"
    },
    "app_metadata": {
      "roles": [
        "AppAdmin"
      ]
    },
    ...
  }
  ```

  ```json リンク後のプロファイル lines expandable theme={null}
  {
    "email": "your0@email.com",
    "email_verified": true,
    "name": "John Doe",
    "given_name": "John",
    "family_name": "Doe",
    "picture": "https://lh3.googleusercontent..../photo.jpg",
    "gender": "male",
    "locale": "en",
    "user_id": "google-oauth2|115015401343387192604",
    "identities": [
      {
        "provider": "google-oauth2",
        "user_id": "115015401343387192604",
        "connection": "google-oauth2",
        "isSocial": true
      },
      {
        "profileData": {
          "phone_number": "+14258831929",
          "phone_verified": true,
          "name": "+14258831929"
        },
        "user_id": "560ebaeef609ee1adaa7c551",
        "provider": "sms",
        "connection": "sms",
        "isSocial": false
      }
    ],
    "user_metadata": {
      "color": "red"
    },
    "app_metadata": {
      "roles": [
        "Admin"
      ]
    },
    ...
  }
  ```
</AuthCodeGroup>

注意:

* `user_id` およびその他すべての主要なプロファイルプロパティは、引き続きプライマリアイデンティティのものです
* `user.identities` 配列の最初の アイデンティティ はプライマリアイデンティティです
* secondary account は、primary profile の `user.identities` 配列内に埋め込まれます
* secondary account の属性は、配列内の対応する アイデンティティ の `profileData` フィールド内に配置されます
* primary account の `user_metadata` と `app_metadata` は変更されません
* secondary account の `user_metadata` と `app_metadata` は破棄されます
* 関連する アイデンティティ を持つユーザープロファイルが自動的に統合されることはありません
* secondary account はユーザー一覧から削除されます
* primary account を削除すると、secondary account も削除されます

<div id="metadata-merge">
  ### メタデータのマージ
</div>

アカウントリンク時に、メタデータが自動的にマージされることはありません。マージする場合は、Manage API の [`/users/patch_users_by_id`](https://auth0.com/docs/api/v2#!/Users/patch_users_by_id) エンドポイントを使用して、手動で行う必要があります。

[Auth0 Node.js SDK for APIv2](https://github.com/auth0/node-auth0/) も利用できます。

詳しくは、[ユーザープロファイルにおけるメタデータの仕組み](/docs/ja-jp/manage-users/user-accounts/metadata) を参照してください。

<div id="scenarios">
  ## シナリオ
</div>

アカウントリンクを実装する方法は、2 つあります。

* ユーザー主導のアカウントリンク: アプリ内の管理画面から、ユーザー自身が自分のアカウントをリンクできるようにします。
* 提案型アカウントリンク: 同じメールアドレスを持つアカウントを特定し、アプリ内でそれらをリンクするようユーザーに促します。

<div id="user-initiated-account-linking">
  ### ユーザー主導のアカウントリンク
</div>

通常、アカウントリンクは認証済みユーザーによって開始されます。アプリでは、ユーザーのプロファイルページに **アカウントをリンクする** ボタンを配置するなど、そのための UI を提供する必要があります。

Single Page Application でユーザー主導のアカウントリンクを実装する方法について詳しくは、[クライアントサイドのアカウントリンク](/docs/ja-jp/manage-users/user-accounts/user-account-linking/user-initiated-account-linking-client-side-implementation) を参照してください。Regular Web Application でユーザー主導のアカウントリンクを実装する方法について詳しくは、[サーバーサイドのアカウントリンク](/docs/ja-jp/manage-users/user-accounts/user-account-linking/suggested-account-linking-server-side-implementation) を参照してください。

<div id="suggested-account-linking">
  ### 推奨されるアカウントリンク
</div>

同じメールアドレスを持つアカウントを見つけて、それらをリンクするようユーザーに促すことができます。たとえば、ユーザーが `user@gmail.com` で Google アカウントを作成した後、同じメールアドレスに関連付けられた Facebook アカウントでログインすることがあります。

このような場合は、リンク先のアカウントで先に認証してもらったうえで、リンク可能なアカウントの一覧を表示し、ユーザーがそれらをリンクできるようにできます。

同じことを実現する方法として、[Account Link 拡張機能](/docs/ja-jp/customize/extensions/account-link-extension) を使用することもできます。

<Warning>
  以前は、場合によっては ID Token を使用してユーザーアカウントのリンクおよびリンク解除を行うことができました。この機能は現在非推奨となりつつあります。今後は、すべてのケースでアクセストークンを使用する必要があります。
</Warning>

<div id="learn-more">
  ## 詳しく見る
</div>

* [ユーザーアカウントをリンクする](/docs/ja-jp/manage-users/user-accounts/user-account-linking/link-user-accounts)
* [ユーザーアカウントのリンクを解除する](/docs/ja-jp/manage-users/user-accounts/user-account-linking/unlink-user-accounts)
* [ユーザー主導のアカウントリンク: クライアントサイド実装](/docs/ja-jp/manage-users/user-accounts/user-account-linking/user-initiated-account-linking-client-side-implementation)
* [ユーザーアカウントのリンク: サーバーサイド実装](/docs/ja-jp/manage-users/user-accounts/user-account-linking/suggested-account-linking-server-side-implementation)
