OIDC / OAuth 2.0

UserInfoエンドポイント

OIDC

アクセストークンを使ってユーザー情報を取得する標準化されたエンドポイントの仕組みを学びます。

UserInfoエンドポイントの役割

UserInfoエンドポイントは、OIDCプロバイダーが提供するユーザー情報取得用のAPIです。アクセストークンをBearerトークンとして送信することで、 認証されたユーザーのプロフィール情報を取得できます。

このエンドポイントはOIDCの仕様で標準化されており、 どのプロバイダーでも同じ方法でユーザー情報を取得できます。

リクエストとレスポンス

リクエスト

GET /userinfo HTTP/1.1
Host: accounts.example.com
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

レスポンス

HTTP/1.1 200 OK
Content-Type: application/json

{
  "sub": "user-12345",
  "name": "Alice Smith",
  "given_name": "Alice",
  "family_name": "Smith",
  "preferred_username": "alice",
  "email": "alice@example.com",
  "email_verified": true,
  "picture": "https://example.com/alice/photo.jpg",
  "updated_at": 1699900000
}

POSTメソッドでも取得可能です。その場合、アクセストークンは リクエストボディの access_token パラメータとして送信します。

IDトークン vs UserInfo
項目IDトークンUserInfoエンドポイント
取得方法トークンレスポンスに含まれる別途APIリクエストが必要
情報量最小限(認証に必要な情報のみ)豊富(スコープに応じて詳細)
署名署名あり(JWT)通常は署名なし(HTTPS依存)
鮮度発行時点の情報(キャッシュ可)リクエスト時点の最新情報
用途認証の証明プロフィール情報の取得

IDトークンは認証の証明として使い、 詳細なプロフィール情報が必要な場合にUserInfoエンドポイントを呼び出す、 というのが推奨パターンです。

スコープとクレームの対応

認可リクエストで指定するスコープによって、 UserInfoエンドポイントから返却されるクレームが決まります。

openid- OIDC認証の必須スコープ
sub
profile- 基本的なプロフィール情報
namefamily_namegiven_namemiddle_namenicknamepreferred_usernameprofilepicturewebsitegenderbirthdatezoneinfolocaleupdated_at
email- メールアドレス情報
emailemail_verified
address- 住所情報
address
phone- 電話番号情報
phone_numberphone_number_verified
エラーレスポンス

アクセストークンが無効な場合や権限が不足している場合、 以下のようなエラーが返されます。

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="invalid_token",
  error_description="The access token expired"
  • invalid_token - トークンが無効または期限切れ
  • insufficient_scope - 要求されたクレームに対してスコープが不足

次のステップ

OIDCの基礎を理解したら、次は セキュリティ セクションで、OAuth/OIDCのセキュリティ対策を学びましょう。