OIDC / OAuth 2.0
基礎

スコープとクレーム

スコープは「何を許可するか」を定義し、 クレームは「トークンに何が含まれるか」を表します。 この2つの関係を理解することが、OIDC を使いこなす鍵です。

スコープ (Scope) - 権限の範囲

スコープは、クライアントがアクセスしたい情報や操作の「範囲」を宣言するものです。 ユーザーは認可画面で、どのスコープを許可するか選択できます。

例え話

スコープは「注文書」のようなもの。レストランで「ドリンクメニューだけ見せてください」 と頼むのと、「全メニュー見せてください」と頼むのでは、見られる範囲が違います。 スコープで「何を要求するか」を明確にし、お客さん(ユーザー)が承認します。

OIDC 標準スコープ
openid

OIDC を使うことを示す必須スコープ。IDトークンが返される。

必須
profile

名前、ニックネーム、写真などのプロフィール情報。

email

メールアドレスとメール確認状態。

address

住所情報。

phone

電話番号と電話番号確認状態。

offline_access

リフレッシュトークンの発行を要求する。

認可リクエストでのスコープ指定

# 認可エンドポイントへのリクエスト

GET /authorize?

response_type=code&

client_id=my-app&

scope=openid profile email&

redirect_uri=https://my-app.com/callback

# スコープはスペース区切りで複数指定可能

クレーム (Claim) - トークンに含まれる情報

クレームは、トークン(特にIDトークン)の中に含まれる個々の情報のことです。 「名前」「メールアドレス」「発行者」「有効期限」などが、それぞれ1つのクレームです。

主要なクレーム
クレーム説明スコープ
subユーザーの一意識別子openid
nameフルネームprofile
given_nameprofile
family_nameprofile
pictureプロフィール画像のURLprofile
emailメールアドレスemail
email_verifiedメール確認済みかどうかemail
issトークン発行者(必須)
audトークンの対象者(必須)
exp有効期限(必須)
iat発行日時(必須)

スコープとクレームの関係

スコープを要求すると、そのスコープに対応するクレームがトークンに含まれます。 つまり、スコープは「クレームのグループ」と考えることができます。

# scope=openid profile email を要求した場合

openid → sub

profile → name, given_name, family_name, picture, ...

email → email, email_verified

# IDトークンのペイロード

{

"sub": "user-123",

"name": "田中太郎",

"email": "tanaka@example.com",

"email_verified": true,

"iss": "https://auth.example.com",

"aud": "my-app",

"exp": 1700000000,

"iat": 1699996400

}

覚えておきたいポイント

1.

openid スコープがないと OIDC として扱われない(純粋な OAuth 2.0 になる)

2.

プロバイダーによっては独自のスコープやクレームを提供している (例: Google の https://www.googleapis.com/auth/drive.readonly

3.

最小権限の原則に従い、必要なスコープだけを要求すべき

← 前へ

次のステップ

各エンドポイント

次へ →