3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【解説】IDトークン、アクセストークン、リフレッシュトークンの違いと役割

Posted at

【解説】JWT形式で発行されるIDトークン、アクセストークン、リフレッシュトークンの違いと役割

Webアプリケーションやモバイルアプリケーションの開発において、認証と認可は非常に重要な要素です。Amazon CognitoやOAuth 2.0などの認証プロバイダーを使用する際に、しばしば登場するのがIDトークン、アクセストークン、リフレッシュトークンの3種類のトークンです。

この記事では、それぞれのトークンがどのような役割を果たしているのか、どのように使い分けるべきかを詳しく解説します。

トークンの基本概念

JWT(JSON Web Token)とは?

3種類のトークンは、通常、JWT(JSON Web Token)形式で発行されます。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成され、各部分はドットで区切られた文字列になっています。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWTは、ユーザー情報や認可情報を安全にクライアントとサーバー間でやり取りするためのトークン形式です。

1. IDトークン

概要

IDトークンは、ユーザーが認証されたことをクライアントアプリケーションに通知するためのトークンです。これにより、クライアントアプリケーションは「誰がログインしているのか」を把握することができます。

主な用途

  • ユーザー情報の表示: IDトークンには、ユーザーの名前やメールアドレスなどの情報が含まれており、クライアントアプリケーションでこれらの情報を表示する際に使用します
  • ユーザの認証: シングルページアプリケーション(SPA)などでは、IDトークンが有効なものかを確認することで、ユーザーの認証を行う事ができる

含まれる主なクレーム

  • sub: ユーザーの一意識別子(ID)
  • email: ユーザーのメールアドレス
  • name: ユーザーのフルネーム
  • iat: トークンの発行日時
  • exp: トークンの有効期限

使用シナリオ

IDトークンは、主にクライアントアプリケーション内で使用され、ユーザーのプロファイル情報を表示したり、ユーザーがログインしていることを確認するために使われます。

2. アクセストークン

概要

アクセストークンは、ユーザーが特定のリソースやAPIにアクセスする権限を持っていることを証明するためのトークンです。APIリクエストにおいて、認証済みのユーザーとしてリクエストを送信するために使われます。

主な用途

  • APIアクセスの認可: クライアントアプリケーションがAPIにアクセスする際に、このトークンを使用してユーザーがその操作を行う権限を持っていることを証明します

含まれる主なクレーム

  • sub: ユーザーの一意識別子(ID)
  • iss: トークンの発行者
  • aud: トークンの対象(クライアントID)
  • scope: ユーザーが持つアクセス権限
  • exp: トークンの有効期限

使用シナリオ

アクセストークンは、APIリクエストのAuthorization ヘッダーに含めて使用されます。これにより、リソースサーバー(APIサーバー)は、このリクエストが正当なものであり、リクエスト元ユーザーがその操作を行う権限を持っていることを確認できます。

3. リフレッシュトークン

概要

リフレッシュトークンは、アクセストークンの有効期限が切れた後でも、ユーザーが再度ログインすることなく新しいアクセストークンを取得するためのトークンです。これにより、ユーザーのセッションをシームレスに延長することができます。

主な用途

  • アクセストークンの再発行: クライアントアプリケーションが、ユーザーの再ログインを求めることなく、バックグラウンドで新しいアクセストークンを取得するために使用します。

含まれる主なクレーム

リフレッシュトークン自体には、一般的にユーザー情報や認可情報が含まれず、サーバー側でのみ有効性を検証するために使用されます。

使用シナリオ

リフレッシュトークンは、クライアントアプリケーションがアクセストークンの有効期限が切れたときに、新しいアクセストークンを取得するためのリクエストをサーバーに送信する際に使用します。このプロセスにより、ユーザーは再度ログインすることなくセッションを継続できます。

トークンの使い分け

トークン種別 役割 使用場所 有効期間 主なクレーム
IDトークン ユーザーの認証情報を提供 クライアントアプリ内 短期間(数分〜1時間) sub, email, name
アクセストークン APIアクセスの認可 APIリクエスト 短期間(数分〜1時間) sub, scope, exp
リフレッシュトークン アクセストークンの再発行 サーバー側(バックエンド) 長期間(数日〜数週間) なし(クライアントが知る必要がないため)

まとめ

Cognitoを使う上で色々な用語がでてきますが、違いが理解できたので、実際の設計での使い分けする事ができました。
IDトークン、アクセストークン、リフレッシュトークンは、それぞれ異なる役割を持ち、認証と認可のプロセスにおいて重要な役割を果たします。

参考

3
4
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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?