Amazon Cognito によるエンドユーザー認証

AWS へのアプリケーションデプロイ

Dunieski Otano

Amazon Web Services Solutions Architect

ログインを自作しますか?

  • 新しいアプリにはサインアップとサインインの機能が必要です
  • チームは認証機能をゼロから構築しようとしています
  • Cognito はすでにこれを安全に実現します

カスタムログインを自作する代わりに、マネージドサービスの Amazon Cognito 認証を選択する

AWS へのアプリケーションデプロイ

ユーザープールと ID プールの違い

左側にトークンを発行するユーザーディレクトリとしての Cognito ユーザープール、中央に検証済みトークンを一時的な AWS 認証情報と交換する ID プール、右側に AWS サービス

  • ユーザープール:エンドユーザーのマネージドディレクトリ
  • サインアップ・サインインを処理し、トークンを発行します
  • ID プール:ログイン情報をAWS 認証情報と交換します
  • 組み合わせて使用:認証後に AWS アクセスを認可します
AWS へのアプリケーションデプロイ

Cognito の 3 種類のトークン

  • ID トークン:ユーザーの身元(ID クレーム)
  • アクセストークン:ユーザーが呼び出せる操作
  • リフレッシュトークン:再ログインなしで新しいトークンを取得
  • 3 つすべてはデコードおよび検証可能なJWT です

Cognito の 3 つの JWT トークンを並べて表示:ID クレームを持つ ID トークン、API 権限スコープを持つアクセストークン、サイレント更新用の長期有効なリフレッシュトークン

AWS へのアプリケーションデプロイ

フェデレーション ID

  • フェデレーション:外部 ID プロバイダーでサインイン
  • ソーシャル:Google、Facebook、Apple
  • エンタープライズ:SAML および OIDC プロバイダー
  • Cognito が信頼を仲介し、独自のトークンを発行します

Cognito フェデレーション:ユーザーがソーシャルプロバイダー(Google、Facebook)またはエンタープライズ SAML/OIDC プロバイダーを選択し、Cognito が外部ログインを検証して独自の標準トークンを発行

AWS へのアプリケーションデプロイ

API Gateway オーソライザーとしての Cognito

API Gateway Cognito オーソライザー:クライアントがアクセストークンを含む Authorization ヘッダーを送信し、Lambda 実行前にゲートウェイがユーザープールに対してトークンを検証、無効なトークンは 401 で拒否

  • API Gateway はCognito オーソライザーを使用できます
  • クライアントはAuthorization ヘッダーにトークンを付けて送信します
  • API Gateway はバックエンド実行前にトークンを検証します
  • 無効または期限切れのトークンはエッジで拒否されます
AWS へのアプリケーションデプロイ

サインインから API 呼び出しまでの典型的なフロー

  • ユーザーがユーザープールにサインインします
  • ID トークン、アクセストークン、リフレッシュトークンを受け取ります
  • クライアントはアクセストークンを付けて API Gateway を呼び出します
  • Cognito オーソライザーが検証後、バックエンドが実行されます

サインインから API 呼び出しまでのフロー:ユーザーがユーザープールにサインインしてトークンを受け取り、クライアントがアクセストークンを API Gateway に送信し、Cognito オーソライザーが検証後にバックエンドの Lambda が実行される

AWS へのアプリケーションデプロイ

Cognito のよくある間違い

  • アクセストークンが必要な箇所にID トークンを送信してしまう
  • ユーザープールと ID プールを混同する
  • ユーザープールだけでAWS アクセスを認可しようとする
  • クライアント上でトークンを安全でない方法で保存する

Cognito のよくある間違い:API にアクセストークンの代わりに ID トークンを送信、ユーザープールと ID プールの混同、クライアント上でのトークンの安全でない保存

AWS へのアプリケーションデプロイ

練習しましょう!

AWS へのアプリケーションデプロイ

Preparing Video For Download...