UsernameAttributes と AliasAttributes の違いはなに?  ユースケース付きで解説します😎

UsernameAttributes と AliasAttributes の違いはなに? ユースケース付きで解説します😎

こんにちは!

Cognito で認証を構築する際は、ユーザーに対し何の属性値でサインインさせるのかを事前に設計しなければいけません。デプロイ後に設定変更できないので、きちんと考えたいところです・・・。

本記事では、ユーザーのサインインで指定できる属性値に関する UsernameAttributes と AliasAttributes について解説します。

想定する読者

  • Cognito を使用して認証機能を開発しているヒト
  • Cognito の CloudFormation を書いているヒト
  • Serverless Framework で Cognito を構築しているヒト

はじめに

本記事は Cognito ユーザープールに関する内容です

ユーザプールサインインに関する内容を中心に書きますので、ID プールの内容については一切触れません。

UsernameAttributes と AliasAttributes は ID プールに関連するものではありません。

Cloud Formation の該当箇所

UsernameAttributes と AliasAttributes の該当箇所はこちらです。CloudFormation に関するドキュメントはこちらです。

Type: 'AWS::Cognito::UserPool'
Properties:
  ...
  AliasAttributes:
    - email
    - preferred_username 
  UsernameAttributes: 
    - email
  ...

尚、AliasAttributes または UsernameAttributes どちらか一方しか定義できませんのでご注意ください。

AliasAttributes と UsernameAttributes の動作の違い

それぞれのサインインに関する動作の違いは下記になります。

AliasAttributes の動作

  • username とパスワードでサインイン可能
  • AliasAttributes にて設定する Email, Phone_number, preferred_username (任意のユーザー名) とパスワードでもサインイン可能

UsernameAttributes の動作

  • UsernameAttributes にて設定する Email, Phone_number とパスワードでのみサインイン可能

AliasAttributes と UsernameAttributes のユースケース

従ってそれぞれのユースケースは下記となります。

AliasAttributes のユースケース

username または Email, Phone_number, preferred_username (任意のユーザー名) 属性とパスワードでのサインインをしたい場合に使用します。

UsernameAttributes のユースケース

Email, Phone_number 属性とパスワードでのみサインインをしたい場合に使用します。

AliasAttributes に対して、サインインに指定可能な属性値が少ないのがポイントです。

AliasAttributes だけを使用すればいいのでは?

間違ってはいないです、動作上問題ないので機能的にも問題ないと言えるでしょう。

ただ、UsernameAttributes を使用しサインインの方法をより明示的にすることで、第三者がアーキテクチャー(サインインの方法)を見るときにわかりやすくなるメリットがあります。

まとめ

わたし達が認証を構築する際は、まずどんな属性情報でサインインするかをヒアリングします。

例えば業務アプリであれば Email とパスワードのみが主流なので、その場合はUsernameAttributes の使用を検討しますし、逆にサインイン属性が多そうな場合は AliasAttributes を使用します。( toC 向けのアプリケーションなどの場合には有効ですね)

AWS Cognito の構築についてはお気軽にお問い合わせください。