Cognito ユーザープールクライアント は、Cognito ユーザープールとアプリケーション(Web、モバイル、バックエンド)を接続するための設定 です。
ユーザープールクライアント(User Pool Client)= ユーザープールを利用するアプリケーションの「アクセス設定」
これを作成することで、アプリが Cognito に対して認証やトークンの取得を実行できるようになります。
1. ユーザープールクライアントの役割
Cognito ユーザープールクライアントは、アプリケーションが Cognito にアクセスするための「入口」 です。
具体的には、以下のようなことを設定できます。
✅ アプリケーションがどの認証フローを使うか
✅ アクセストークン・リフレッシュトークンの有効期限
✅ クライアントシークレットの有無
✅ 認証フロー(パスワード認証、OAuth、SRP など)
✅ Cognito のホスト型 UI(ログイン画面)の利用可否
2. ユーザープールクライアントが必要な理由
Cognito には「ユーザープール」があり、ユーザーの情報を管理できますが、そのままではアプリケーションからアクセスできません。
💡 ユーザープールクライアントを作成することで、アプリケーションが Cognito に認証リクエストを送信できるようになる!
例えば、以下のような用途で使われます。
用途 | 必要な設定 |
---|---|
Webアプリ(SPA、React、Vue) |
GenerateSecret: false (シークレットなし) |
モバイルアプリ(iOS / Android) | ExplicitAuthFlows: ALLOW_USER_SRP_AUTH |
サーバーサイドアプリ(バックエンド API) |
GenerateSecret: true (クライアントシークレットあり) |
3. CloudFormation でユーザープールクライアントを作成
CloudFormation を使って ユーザープールクライアント を作成する場合、AWS::Cognito::UserPoolClient
を定義します。
Resources:
CognitoUserPoolClient:
Type: AWS::Cognito::UserPoolClient
Properties:
ClientName: MyWebAppClient
UserPoolId: !Ref CognitoUserPool
GenerateSecret: false
ExplicitAuthFlows:
- ALLOW_USER_SRP_AUTH
- ALLOW_REFRESH_TOKEN_AUTH
4. ユーザープールクライアントの主な設定
設定項目 | 説明 |
---|---|
ClientName |
クライアントの名前(例: WebAppClient) |
UserPoolId |
どのユーザープールに関連付けるか |
GenerateSecret |
true: クライアントシークレットあり(サーバー向け) false: シークレットなし(フロントエンド向け) |
ExplicitAuthFlows |
許可する認証フロー(パスワード認証、SRP など) |
RefreshTokenValidity |
リフレッシュトークンの有効期限(日数単位) |
5. どの認証フローを使うべきか?
ユーザープールクライアントの設定は、利用するアプリの種類に応じて変わります。
アプリの種類 | 推奨設定 |
---|---|
Webアプリ(SPA / JavaScript) |
GenerateSecret: false (シークレットなし) |
モバイルアプリ(iOS / Android) | ExplicitAuthFlows: ALLOW_USER_SRP_AUTH |
バックエンド(API サーバー) |
GenerateSecret: true (シークレットあり) |
6. 実際の認証フロー
-
フロントエンドアプリ(React, Vue, Angular など)
- Cognito ホスト UI でユーザーがログイン
- IDトークン(JWT) を取得し、API Gateway に送信
- API Gateway が Cognito でトークンを検証
- 認証成功ならバックエンドの Lambda を呼び出し
-
モバイルアプリ(iOS / Android)
-
ALLOW_USER_SRP_AUTH
を使ってログイン - Cognito からトークンを取得し、アプリ内で保持
- API Gateway にトークンを送信して認証
-
-
バックエンド(サーバー側)
-
GenerateSecret: true
にして、クライアントシークレットを使用 - OAuth2 のクライアント認証でアクセストークンを取得
- 他のマイクロサービスと連携して認証を処理
-
7. まとめ
🔹 Cognito ユーザープールクライアント は、Cognito ユーザープールとアプリをつなぐ重要な設定。
🔹 アプリの種類に応じて、認証フローを適切に設定することが重要!
🔹 CloudFormation では AWS::Cognito::UserPoolClient
を使って定義できる。
🎯 適切な設定を行い、Cognito を活用した認証基盤を構築しましょう! 🚀