

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# フェデレーションユーザーを既存のユーザープロファイルにリンクする
<a name="cognito-user-pools-identity-federation-consolidate-users"></a>

多くの場合、同じユーザーが、ユーザープールに接続している複数の ID プロバイダー (IdP) にプロファイルを持っています。Amazon Cognito では、ユーザーが出現するたびにディレクトリ内の同じユーザープロファイルにリンクできます。このようにして、複数の IdP ユーザーを持つ 1 人のユーザーが、アプリで一貫したエクスペリエンスを持つことができます。[AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html) は、フェデレーションディレクトリ内のユーザーの一意の ID をユーザープール内のユーザーとして認識するように Amazon Cognito に指示します。ユーザープール内のユーザーは、ユーザープロファイルに関連付けられているフェデレーション ID が 0 個以上ある場合、[課金](https://aws.amazon.com/cognito/pricing/)の目的で 1 人の月間アクティブユーザー (MAU) としてカウントされます。

フェデレーションユーザーが初めてユーザープールにサインインすると、Amazon Cognito はその ID にリンクされたローカルプロファイルを探します。リンクされたプロファイルが存在しない場合、ユーザープールは新しいプロファイルを作成します。ローカルプロファイルを作成して、`AdminLinkProviderForUser` API リクエストで、計画されたプリステージタスクまたは [サインアップ前の Lambda トリガー](user-pool-lambda-pre-sign-up.md) のいずれかで初めてサインインする前に、フェデレーションユーザーにいつでもリンクできます。ユーザーがサインインし、Amazon Cognito がリンクされたローカルプロファイルを検出すると、ユーザープールはユーザーのクレームを読み取り、IdP のマッピングルールと比較します。次に、ユーザープールは、ログイン時にマッピングされたクレームを反映して、リンクされたローカルプロファイルを更新します。これにより、アクセスクレームを使用してローカルプロファイルを設定し、ID クレームをプロバイダーとの間で最新の状態に保つことができます。Amazon Cognito により、フェデレーションユーザーとリンクされたプロファイルがマッチングされると、フェデレーションユーザーは常にそのプロファイルにサインインします。次に、ユーザーの他のプロバイダー ID を同じプロファイルにリンクして、ユーザーのアプリエクスペリエンスを一貫させることができます。以前にサインインしたフェデレーションユーザーをリンクするには、まず既存のプロファイルを削除する必要があります。既存のプロファイルは、`{{[Provider name]}}_identifier` という形式で識別できます。例えば、`LoginWithAmazon_amzn1.account.AFAEXAMPLE`。ユーザーを作成してサードパーティーユーザー ID にリンクした場合、そのユーザーは、作成時につけられたユーザー名と、リンクされた ID の詳細を含む `identities` 属性を持つことになります。

**重要**  
`AdminLinkProviderForUser` は、外部フェデレーション ID を持つユーザーが、ユーザープール内の既存のユーザーとしてサインインすることを許可するため、アプリケーション所有者によって信頼されている外部 IdP およびプロバイダー属性でのみ使用されることが重要です。

例えば、複数のお客様と共有するアプリを使用するマネージドサービスプロバイダー (MSP) の場合です。お客様はそれぞれ、Active Directory Federation Services (ADFS) を使用してアプリにサインインします。IT 管理者 Carlos は、各お客様のドメインにアカウントを持っています。IdP に関係なく、Carlos がサインインするたびにアプリ管理者として認識されるようにします。

ADFS IdP は、Carlos の SAML アサーションの `email` クレームで Carlos の E メールアドレス `msp_carlos@example.com` を Amazon Cognito に提示します。ユーザー名 `Carlos` を使用してユーザープールにユーザーを作成します。以下の AWS Command Line Interface (AWS CLI) コマンドは、IdPs ADFS1、ADFS2、ADFS3 から Carlos の ID をリンクします。

**注記**  
特定の属性クレームに基づいてユーザーをリンクできます。この機能は OIDC と SAML IdP に固有のものです。他のプロバイダータイプでは、固定ソース属性に基づいてリンクする必要があります。詳細については、「[AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html)」を参照してください。ソーシャル IdP をユーザープロファイルにリンクするとき、`ProviderAttributeName` に `Cognito_Subject` を設定する必要があります。`ProviderAttributeValue` は、IdP のユーザーの一意の識別子でなければなりません。

```
aws cognito-idp admin-link-provider-for-user \
--user-pool-id us-east-1_EXAMPLE \
--destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \
--source-user ProviderName=ADFS1,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com

aws cognito-idp admin-link-provider-for-user \
--user-pool-id us-east-1_EXAMPLE \
--destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \
--source-user ProviderName=ADFS2,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com

aws cognito-idp admin-link-provider-for-user \
--user-pool-id us-east-1_EXAMPLE \
--destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \
--source-user ProviderName=ADFS3,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com
```

ユーザープールのユーザープロファイル `Carlos` は、次の `identities` 属性を持つようになりました。

```
[{
    "userId": "msp_carlos@example.com",
    "providerName": "ADFS1",
    "providerType": "SAML",
    "issuer": "http://auth.example.com",
    "primary": false,
    "dateCreated": 111111111111111
}, {
    "userId": "msp_carlos@example.com",
    "providerName": "ADFS2",
    "providerType": "SAML",
    "issuer": "http://auth2.example.com",
    "primary": false,
    "dateCreated": 111111111111111
}, {
    "userId": "msp_carlos@example.com",
    "providerName": "ADFS3",
    "providerType": "SAML",
    "issuer": "http://auth3.example.com",
    "primary": false,
    "dateCreated": 111111111111111
}]
```

**フェデレーションユーザーのリンクについて知っておくべきこと**
+ 各ユーザープロファイルに最大 5 人のフェデレーションユーザーをリンクできます。
+ `AdminLinkProviderForUser` API リクエストにおける `SourceUser` の `ProviderAttributeName` パラメータで定義されているように、最大 5 つの IdP 属性クレームから各 IdP にユーザーをリンクできます。例えば、少なくとも 1 人のユーザーをソース属性 `email`、`phone`、`department`、`given_name`、`location` にリンクしている場合、これらの 5 つの属性のいずれかにおいてのみ追加ユーザーをリンクできます。
+ フェデレーションユーザーは、既存のフェデレーションユーザープロファイルまたはローカルユーザーにリンクできます。
+ のユーザープロファイルにプロバイダーをリンクすることはできません AWS マネジメントコンソール。
+ ユーザーの ID トークンには、`identities` クレームに関連するすべてのプロバイダーが含まれます。
+ [AdminSetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) API リクエストで、自動的に作成されたフェデレーションユーザープロファイルのパスワードを設定できます。その後、そのユーザーのステータスは `EXTERNAL_PROVIDER` から `CONFIRMED` に変わります。この状態のユーザーは、フェデレーションユーザーとしてサインインし、リンクされたローカルユーザーのように API で認証フローを開始できます。また、[ChangePassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ChangePassword.html) や [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) などのトークン認証された API リクエストでパスワードや属性を変更することもできます。セキュリティのベストプラクティスとして、またユーザーを外部 IdP と同期した状態を維持するため、フェデレーションユーザープロファイルにパスワードを設定しないでください。代わりに、`AdminLinkProviderForUser` でユーザーをローカルプロファイルにリンクしてください。
+ Amazon Cognito は、ユーザーが IdP からサインインするときに、リンクされたローカルユーザープロファイルにユーザー属性を入力します。Amazon Cognito は OIDC IdP からの ID トークン内のアイデンティティ要求を処理し、OAuth 2.0 プロバイダーと OIDC プロバイダー両方の `userInfo` エンドポイントもチェックします。Amazon Cognito では、ID トークン内の情報は `userInfo` からの情報よりも優先されます。

プロファイルにリンクした外部ユーザーアカウントをユーザーが使用しなくなった場合は、ユーザーアカウントとユーザープールユーザーとの関連付けを解除できます。ユーザーをリンクしたときに、ユーザーの属性名、属性値、プロバイダー名をリクエストに入力しました。ユーザーに不要となったプロファイルを削除するには、同じパラメータを指定して [AdminDisableProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDisableProviderForUser.html) API リクエストを行います。

 AWS SDK での追加のコマンド構文と例については、「[AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html)」を参照してください。