概要
その1で、Cognitoユーザープールの説明の前半部分を書きましたが、今回はその後半になります。
アプリクライアントの作成
このユーザープールを使用して認証を行うアプリの設定をします。
設定項目は下記の通り。
項目名 | 説明 | 備考 |
---|---|---|
アプリクライアント名 | このユーザープールを使用するアプリの名称 | |
トークンの有効期限を更新 | ログイン時に発行される、各種トークンの有効期間(日) | デフォルトは30日。この期限を超えたら、トークンのリフレッシュが必要になる |
クライアントシークレットを作成 | クライアント用のシークレットを作成する | SDKではクライアントシークレットを使用しない(使用すると例外を出す)ので、SDKを使用する場合はチェックを外すこと |
サーバーベースの認証でサインイン API を有効にする | AWSコンソールなど、サーバーベースでのアカウント作成を許可する | チェック推奨。コンソール以外にも、AWS CLIからアカウント生成&パスワード認証を行えるようになる。(下記リンク参照) |
カスタム認証のみを許可する | 標準の認証フローを使わず、Lambdaトリガの「認証チャレンジ」による認証フローのみ許可する | Lambdaトリガについては後述 |
アプリベースの認証でユーザー名とパスワードの (SRP を使用しない) フローを有効にする | Secure Remote Passwordプロトコルを使用しない、使用するアプリからのID&パスワードのみによる認証を有効にする | 公式ページによると、旧(レガシーな)システムからのユーザー移行を行う場合、チェックを付けると移行がスムーズとのこと。(逆に言えば、それ以外ではチェックを外すのがよい) |
また、「属性の読み込みおよび書き込みアクセス権限を設定する」をクリックすると、各種ユーザー属性(attributes)の読み込みや書き込みの許可/不許可が設定できます。(デフォルトはすべて読み書き可能)
Lambdaトリガの設定
Cognitoでは、各種認証処理(サインアップ・サインインなど)の前後に、Lambda関数による独自の処理を追加することができます。
その独自処理を行うタイミング&実行するLambda関数を定義します。
これを使用すると、例えば以下のようなことができます。
- サインアップ時に、検証コードや検証リンクなしにメールアドレスを強制的に「検証済み」にする
- ログイン時に、Cognitoによる認証(ID・パスワード・検証コードなど)以外に、独自の認証ロジックを追加できる(下記リンク参照)
- サインアップ&認証コード送信時に送るメールの内容を、自由にカスタマイズできる。
てかこれ、実際触ると分かるんですが、本当に便利なんです。
※このLambdaトリガに関しては、次回or次々回くらいに、ブログに記載しようと思ってます。
ちなみに、下記公式ページに詳しいことが記載されています。
また、Lambdaトリガ処理は下表のタイミングで実施することができます。(公式ページより抜粋)
あとは最終確認として設定内容が表示されるので、問題なければ「プールの作成」をクリックすると、ユーザープールの作成が実行されます。
フェデレーテッドアイデンティティ
Cognitoには、「認証を行ったユーザーに対して、特定のロールを割り当てる」ことができる「フェデレーテッドアイデンティティ」という機能があります。
これを利用すると、例えば下記のことができます。
- ユーザープールごとに、使用できる機能(例えば、実行できるLambdaなど)を割り当てることができる
- 認証(=ログイン)をしていないユーザーにも、権限を与えることができる。
- 認証の有無で、実行できる権限を変更できる
- 外部SNSなど、Cognito以外の認証(=OAuth)をサポートし、権限を設定できる
IDプールの作成
「新しいIDプールの作成」画面では、下記の設定を行います。
※ちなみに「IDプール」は、「ユーザープール」とは別物です。
項目名 | 説明 | 備考 |
---|---|---|
IDプール名 | このIDプールの名称 | |
認証されていないID | 未認証(=未ログイン)のユーザーに対しても、AWSへの各種リソースへのアクセスを有効にするか | パブリックなアクセスが可能になるので、ロールの設定には要注意 |
認証プロバイダ | 認証に使用するプロバイダ。Cognitoの他、FacebookやGoogleなどのSNSも設定可 | 設定項目はプロバイダ毎に異なる。Cognitoの場合、「ユーザープールID」と「アプリクライアントID」 |
ロールの設定
「認証されたユーザー」及び「認証されていないユーザー」それぞれに割り当てるロールを設定できます。
(先述の「認証されていないID」のチェックを外しても「認証されていないユーザー」が表示されるのは、なんか変ですが...)
「認証されたユーザー」及び「認証されていないユーザー」それぞれに、下記を編集します。
最後に「許可」をクリックすればOKです。
項目名 | 説明 | 備考 |
---|---|---|
IAMロール | 適用するIAMロール(既存項目の使用or新規作成) | |
ロール名 | (IAMロール新規作成時の)ロールの名前 | |
ポリシードキュメント | 適用するポリシー(=インラインポリシー) | 「編集」ボタンをクリックすると編集可能 |
と、長々と書いてしまいましたが、これで一通りCognitoユーザープールの説明ができました。
次回からは、実際にソースコードから下記を実行しようと思います。
- Cognitoユーザープールを行った認証
- 先述の「Lambdaトリガ」の具体的な使用例