LoginSignup
1
1

More than 1 year has passed since last update.

Amazon Cognitoを用いて、ソーシャルサインインにチャレンジして一部制約で実現しなかった。。

Posted at

はじめに

本記事は、cognito ネイティブユーザー(ユーザープール経由で直接サインインしたユーザー)とフェデレーションユーザー(Facebook、Google、Amazon、Apple 経由のソーシャルサインインしたユーザー)をメールアドレスが同じなら同一のユーザーとして扱おうとしたが、Amazon Cognitoの一部制約でCognitoのユーザープール内で実現しなかったお話である。

Amazon Cognitoとは

ウェブおよびモバイルアプリの認証、承認、およびユーザー管理機能を提供します。ユーザーは、ユーザー名(またはメールアドレス)とパスワードを使用して直接サインインするか、Facebook、Amazon、Google、Apple などのサードパーティーを通じてサインインできる。

ユーザープールとは

ユーザープールは、Amazon Cognito のユーザーディレクトリです。ユーザープールを使用することで、ユーザーはウェブまたはモバイルアプリに Amazon Cognito 経由でサインインする、またはサードパーティー ID プロバイダー (IdP) 経由でフェデレートすることができます。ユーザーが直接またはサードパーティーを通じてサインインするかどうかにかかわらず、ユーザープールのすべてのメンバーには、SDK を通じてアクセスできるディレクトリプロファイルがあります。

※AWSのドキュメントの Amazon Cognitoとは から引用

Amazon Cognitoの一部制約で実現しなかった理由

前提条件

Webアプリの機能要件として、Slackのような①直接サインインしたユーザー(メールアドレスとパスワード)と②Googleのサードパーティーを通してサインインしたユーザーのメールアドレスが同じなら同一のユーザーとして扱いたいとのこと

上記の機能要件を満たすため、Amazon Cognitoのユーザープール内で管理できるか検討した。

Amazon Cognitoの一部制約とは

AWS Support CenterのSAによると、下記の①でcognito ネイティブユーザーを作成して、②のGoogleのサードパーティーを通してサインインした場合、Amazon CognitoのAdminLinkProviderForUser APIを使用すれば実現は可能だとのことでした。
しかし、当該APIは、既存のCognito ネイティブユーザーおよびフェデレーションユーザーに対して、まだサインインを行ったことのない外部 IdP のユーザーを紐づけることは可能なだけで、②、①の順番で同一ユーザーをユーザープール内で実現することは現時点では不可能でした。

Cognitoのユーザープールのアカウントの種類
①直接サインインしたユーザー(メールアドレスとパスワード)
②Googleのサードパーティーを通してサインインしたユーザー

ドキュメント

AdminLinkProviderForUser
フェデレーションユーザーを既存のユーザープロファイルにリンクする

最後に

本制約が、いつか改善されて欲しい。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1