0
1

Cognito による認証で使用されているトークンの話

Last updated at Posted at 2023-12-04

前書き

研修の中で Cognito について調べました。その内容をアウトプットしたいと思います。

本文

Cognito とは

Amazon Cognitoは、アプリケーションやウェブサイトにおけるユーザー認証をサポートするためのAWSのサービスの1つです。ユーザごとの ID 管理や AWS リソースへのアクセスコントロールができます。

Cognito を構成する要素は大きく2つに分けることができます。

  • Cognito ユーザプール
    ユーザの作成・管理・認証を行うユーザディレクトリ。認証された JWT ( JSON Web Token )をアプリケーション・ Web サーバ・ API に直接発行します。

  • Cognito ID プール
    AWS リソースへのアクセスを許可します。アプリケーション用の AWS 認証情報である STS トークンを発行します。

ユーザプールが認証、ID プールが認可の役割を担っています。
今回はユーザプール認証で使用するトークンについてまとめます。

認証で使用されているトークン

トークンは認証されたユーザに関するクレーム(情報)を持っているものです。
BASE64 という変換方法でエンコードされた文字列としてトークンを発行します。

BASE64 について
BASE64 とは 64 進数を意味する言葉で、変換方法の一種です。バイナリ全体を bit の配列として捉え、 6 bit ずつ区切り文字列に置き換える処理をします。文字テーブルは 64 文字種 + パディング用の ”=” の 65 文字種です。
受信側と送信側が BASE64 を用いた変換をすることで、メールを通して画像や音声などの送受信が可能になりました。
現在では、JSON などで特殊文字を含まないように画像データを base64 でエンコードしたり、Web ページの表示の際にリクエスト数を減らすために base64 でエンコードした画像を html にそのまま埋め込むなどの用途で用いられています。

また URL に使用できる BASE64 エンコードである BASE64 URL エンコードもあります。
BASE64 エンコード 後、「 + 」 を「 - 」に「 / 」 を「 _ 」に置換します。また、「 = 」によるパディングは行いません。
URL として使う URI の仕様で予約されている特別な文字で「 + 」や「 / 」などが使用されており、別の意味を持ってしまうため置換を行っています。そのためURL セーフ( URL にとって安全である)な変換方法になります。

Amazon Cognito のユーザプールでは、ユーザーがアプリケーションにサインインする際に生成されるさまざまなタイプのトークンがあります。その中で最も重要なトークンは、アクセストークン、ID トークン、そしてリフレッシュトークンの3つです。

ID トークン(ID Token)
ユーザーを識別し、認証されたユーザーの属性情報を提供するトークンです。このトークンには、ユーザーの一意の識別子や属性(例: ユーザーのメールアドレスやグループへの所属情報など)が含まれています。アプリケーションは ID トークンを使用して、ユーザーの個別のサービスを提供するための情報を取得します。

アクセストークン(Access Token)
ユーザーがアプリケーションやAPIに対して認可されたリソースにアクセスする際に使用されます。アクセストークンは、 AWS のサービスやアプリケーションのバックエンドでの認証や権限の付与に利用され、特定の操作やリソースへのアクセスを制御します。

リフレッシュトークン(Refresh Token)
ID トークン・アクセストークンの有効期限が切れた場合、ユーザーは新しい ID トークン・アクセストークンを取得するためにリフレッシュトークンを使用します。リフレッシュトークンを利用することで、ユーザーはサインインセッションを継続し、再認証を行わずに新しいID トークン・アクセストークンを取得することができます。

このように、Amazon Cognitoのユーザプールで使用される3つのトークンは、認証やアクセス制御において重要な役割を果たしています。

JWT について
JWT は JSON データを URL セーフでコンパクトな形式にしたものです。スペースに制約がある環境( HTTP ヘッダやクエリパラメータ)で使用することを想定しています。BASE64 URL エンコードで変換されており、よく使われるデータ項目の名称を省略形にすることで送信するデータ量を軽減しています。

まとめ

Cognito による認証で使用されているトークンについてまとめました。
Amazon Cognito のユーザプールでは、これらのトークンがユーザー認証と権限管理において重要な役割を果たしています。これらのトークンを正しく管理することで、セキュリティを強化し、アプリケーションの安全性を確保することができます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1