フェデレーションユーザーを既存のユーザープロファイルにリンクする
多くの場合、同じユーザーが、ユーザープールに接続している複数の ID プロバイダー (IdP) にプロファイルを持っています。Amazon Cognito では、ユーザーが出現するたびにディレクトリ内の同じユーザープロファイルにリンクできます。このようにして、複数の IdP ユーザーを持つ 1 人のユーザーが、アプリで一貫したエクスペリエンスを持つことができます。AdminLinkProviderForUser は、フェデレーションディレクトリ内のユーザーの一意の ID をユーザープール内のユーザーとして認識するように Amazon Cognito に指示します。ユーザープール内のユーザーは、ユーザープロファイルに関連付けられているフェデレーション ID が 0 個以上ある場合、課金
フェデレーションユーザーがユーザープールにサインインすると、Amazon Cognito は IdP の名前をプレフィックスとするジャストインタイムユーザープロファイルを作成します。ユーザープールでユーザーを検索すると、リンクされたネイティブユーザーと自動的に作成されたフェデレーションユーザーの両方を見つけることができます。トークンの場合、リンクされたユーザーの ID クレームは、そのフェデレーションプロファイルから発信されます。アクセスクレームはネイティブプロファイルから発信されます。
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 をリンクします。
特定の属性クレームに基づいてユーザーをリンクできます。この機能は SAML IdP に固有です。他のプロバイダータイプでは、固定ソース属性に基づいてリンクする必要があります。詳細については、「AdminLinkProviderForUser」を参照してください。OIDC またはソーシャル 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 人のフェデレーションユーザーをリンクできます。
-
フェデレーションユーザーは、既存のフェデレーションユーザープロファイルまたはネイティブユーザーにリンクできます。
-
AWS Management Console で、プロバイダーをユーザープロファイルにリンクすることはできません。
-
ユーザーの ID トークンには、
identities
クレームに関連するすべてのプロバイダーが含まれます。 -
AdminSetUserPassword API リクエストで、自動的に作成されたフェデレーションユーザープロファイルのパスワードを設定できます。その後、そのユーザーのステータスは
EXTERNAL_PROVIDER
からCONFIRMED
に変わります。この状態のユーザーは、フェデレーションユーザーとしてサインインし、リンクされたネイティブユーザーのように API で認証フローを開始できます。また、ChangePassword や UpdateUserAttributes などのトークン認証された API リクエストでパスワードや属性を変更することもできます。セキュリティのベストプラクティスとして、またユーザーを外部 IdP と同期した状態を維持するため、フェデレーションユーザープロファイルにパスワードを設定しないでください。代わりに、AdminLinkProviderForUser
でユーザーをネイティブプロファイルにリンクしてください。
AWS SDK での追加のコマンド構文と例については、「AdminLinkProviderForUser」を参照してください。