AWS Cognitoを使ってユーザー認証を実装する機会があったので、備忘録も兼ねて記事を書いてみます。Cognitoは便利ですが、最初はフローに少し戸惑うこともありました。この記事では、基本的な仕組みと使い方をシンプルにまとめています。
Cognitoとは?
AWS Cognitoは、ユーザー認証と管理を手軽に実現できるサービスです。主に以下の2つの役割があります:
1. ユーザープール (User Pool)
ユーザーの登録やログイン、トークンの管理を行うものです。例えば、Webアプリやモバイルアプリにログイン機能を実装したいときに使います。
2. IDプール (Identity Pool)
認証済みユーザーに対してAWSリソース(S3やDynamoDBなど)へのアクセスを制御するためのものです。例えば、「ログインしたユーザーだけが特定のファイルをダウンロードできる」ようなケースに使えます。
実際の使用例
Cognitoのユーザープールを使ってログイン認証を実装した例を紹介します。例えば、以下のようなリクエストをCognitoに送信することで、トークンを取得できます。
POST https://cognito-idp.<region>.amazonaws.com/
{
"AuthFlow": "USER_PASSWORD_AUTH",
"AuthParameters": {
"USERNAME": "example@example.com",
"PASSWORD": "password123"
},
"ClientId": "xxxxxxxxxxxxxxxxxxxx",
"ClientMetadata": {
"tenant": "my-app"
}
}
これに対するレスポンスとして、以下のようなJSONが返ってきます。
{
"AuthenticationResult": {
"AccessToken": "eyJraWQiOi...",
"IdToken": "eyJraWQiOi...",
"RefreshToken": "eyJjdHkiOi..."
}
}
このレスポンスに含まれるAccessTokenやIdTokenを利用することで、APIの認証が可能になります。
使ってみて感じたこと
USER_PASSWORD_AUTH フローを使うと、簡単にトークンを取得できます。そのトークンを使えばバックエンドやフロントエンドでスムーズに認証処理が進みます。特に、CognitoのトークンはJWT形式なので、デコードするだけでユーザー情報がすぐに使えるのが便利だと感じました。