OIDC / OAuth 2.0
基礎

トークンの概要

OAuth 2.0 / OIDC では3種類のトークンが使われます。 それぞれの役割、特徴、ライフサイクルを理解しましょう。

アクセストークン

API にアクセスするための「通行証」です。 リソースサーバーに対して「この操作を行う権限があります」と証明します。

特徴
-

短い有効期限: 通常15分〜1時間。漏洩した場合の被害を最小限にする。

-

スコープで権限を制限: 「写真の読み取りのみ」のように、できることが限定される。

-

形式は仕様で定められていない: ランダム文字列の場合も、JWT 形式の場合もある。

例え話

ホテルのカードキーのようなもの。 チェックアウト日まで有効で、割り当てられた部屋だけを開けられる。 ホテル全体の管理はできない。

IDトークン

OIDC で追加された「身分証明書」です。 ユーザーが誰であるかという情報(クレーム)が含まれます。 必ず JWT (JSON Web Token) 形式です。

特徴
-

JWT 形式で署名されている: 改ざんを検出できる。

-

ユーザー情報を含む: 名前、メールアドレスなどのクレームが含まれる。

-

API アクセスには使わない: IDトークンはクライアント向け。API にはアクセストークンを使う。

JWT の構造

# IDトークンは3つのパートで構成

eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fw...

# デコードすると

ヘッダー: { alg: "RS256" }

ペイロード: {sub: "1234567890", name: "田中太郎" }

署名: 改ざん検出用のデジタル署名

リフレッシュトークン

アクセストークンの「更新チケット」です。 アクセストークンの有効期限が切れたとき、ユーザーに再ログインを 求めることなく新しいアクセストークンを取得できます。

特徴
-

長い有効期限: 数日〜数ヶ月。ユーザー体験のために長めに設定される。

-

厳重に保管が必要: 新しいアクセストークンを発行できるため、漏洩すると危険。

-

認可サーバーにのみ送信: リソースサーバーには送らない。トークンエンドポイントでのみ使用。

例え話

定期券の更新券のようなもの。 定期券(アクセストークン)が切れても、更新券(リフレッシュトークン)があれば 窓口(認可サーバー)で新しい定期券を受け取れる。 毎回購入手続き(ログイン)をやり直す必要がない。

トークンのライフサイクル

# トークンの一生

1. ユーザーが認証・認可

→ 認可サーバーがトークンを発行

2. クライアントがアクセストークンで API を呼び出す

→ リソースサーバーがトークンを検証

3. アクセストークンの有効期限が切れる (15分〜1時間後)

4. リフレッシュトークンで新しいアクセストークンを取得

→ ユーザーの操作は不要

5. リフレッシュトークンも期限切れ or 取り消し

→ ユーザーに再ログインを求める

3つのトークンの比較

 アクセストークンIDトークンリフレッシュトークン
目的API アクセスユーザー識別トークン更新
送信先リソースサーバークライアント内で利用認可サーバー
有効期限短い (分〜時間)短い (分〜時間)長い (日〜月)
形式不定 / JWT必ず JWT不定
← 前へ

次のステップ

スコープとクレーム

次へ →