メインコンテンツまでスキップ

IDトークンとJWT(JSON Web Token)について


概要

OpenID Connect(OIDC)では「IDトークン」がユーザー本人を証明するために使われます。
IDトークンは「JWT(JSON Web Token)」という標準フォーマットで発行され、セキュアかつ効率的に本人情報や認証結果を伝達できます。


1. IDトークンとは

  • OIDCで発行される「ユーザーの認証結果」を証明するトークン
  • ログインした「本人が誰か」をクライアント(サービス側)に伝える役割
  • OAuth2のアクセストークンとは用途が異なり、「本人の認証情報」に特化

主な用途

  • ソーシャルログイン(Google, LINE, Microsoft など)
  • eKYCや本人確認APIの認証証跡として利用
  • B2Bサービスのアイデンティティ連携

2. JWT(JSON Web Token)とは

  • Web標準の「署名付きトークン形式」
  • 3つの部分で構成(ヘッダー・ペイロード・署名)
  • トークン自体に認証情報や属性情報を格納できる

JWTは「.(ドット)」で区切られた3つのパートからできています。

また、各パートはBase64エンコードされています。デコードすると下記構造になっています。

① ヘッダー(Header)

  • トークンの種類や署名アルゴリズムなどを記載
  • 例(Base64でエンコードされてる)
    {
    "alg": "RS256", // 署名アルゴリズム(例:RS256)
    "typ": "JWT" // トークンの種類
    }

② ペイロード(Payload)

  • ユーザー情報や有効期限など、実際のデータ(主役部分)
  • {
    "sub": "123456", // ユーザーID
    "name": "山田太郎", // ユーザー名
    "email": "taro@example.com", // メールアドレス
    "exp": 1691234567 // 有効期限(UNIXタイム)
    }

③ 署名(Signature)

  • 上記2つ(ヘッダー+ペイロード)を秘密鍵で署名したもの
  • ここが改ざん防止の肝!

まとめ

  • ヘッダー…「形式とアルゴリズム」
  • ペイロード…「ユーザー情報や認証結果」
  • 署名…「改ざん防止・なりすまし防止」

3. IDトークン(JWT)の主な項目例

項目説明
isshttps://idp.example.com発行者(Issuer)
sub123456ユーザーID(Subject)
audmy-client-id受信者(Audience)
exp1691234567有効期限(Expiration)
iat1691231234発行日時(Issued At)
name山田太郎ユーザー名
emailtaro@example.comメールアドレス
auth_time1691231200認証日時
acrurn:oidc:aal:2認証強度(認証レベル)

4. JWTのセキュリティ

  • 署名検証で改ざん・なりすましを防止(IDPの公開鍵で検証)
  • クライアントは「aud」「iss」「exp」などを必ずチェック
  • トークンは可能な限り短い有効期限で運用
  • 秘密情報(パスワードなど)は絶対に含めない

5. 現場でのポイント

  • JWT型トークンは分散システムでもスケーラブル(認証状態をサーバーで一元管理不要)
  • IDトークンは「本人確認」と「属性連携」の両方に使える
  • OIDC対応IdP(IDプロバイダー)の公開鍵ローテーション・検証処理も定期的に見直すこと

仕様参照

RFC・仕様文書

idp-server JWT機能サポート

機能サポート状況実装詳細
JWT署名アルゴリズム
RS256 (RSA + SHA-256)✅ 完全対応RFC 7515 JWS準拠
ES256 (ECDSA P-256 + SHA-256)✅ 完全対応RFC 7515 ECDSA署名
PS256 (RSA-PSS + SHA-256)✅ 完全対応RFC 7515 RSA-PSS署名
HS256 (HMAC + SHA-256)⚠️ 制限付きクライアント秘匿認証のみ
JWE暗号化
RSA-OAEP✅ 完全対応RFC 7516 JWE準拠
ECDH-ES✅ 完全対応RFC 7516 ECDH暗号化
鍵管理
JWKSエンドポイント✅ 完全対応RFC 7517 JWK準拠
鍵ローテーション✅ 完全対応定期的な鍵更新対応
IDトークン拡張
標準クレーム✅ 完全対応クレーム設定
カスタムクレーム✅ 完全対応プラグインで拡張可能
身元確認済みクレーム✅ 完全対応身元確認

idp-server独自JWT拡張

  • マルチテナント署名: テナント単位での署名鍵管理
  • 動的クレーム生成: プラグインによるカスタムクレーム追加
  • 監査証跡: JWTリクエスト・検証の詳細ログ
  • セキュリティイベント: JWT関連のセキュリティ監視
  • 身元確認連携: eKYC結果のIDトークン格納

IDトークン(JWT)は、現代Webの「安全な本人確認・属性連携」の要です。 フロント・バックエンド問わず、きちんと署名検証&項目チェックを徹底しましょう!