OpenID Connect (OIDC・2014)(オープンアイディコネクト)
OpenID Foundation 2014年標準化のOAuth 2.0 上認証プロトコル。JWT ID Token・「Sign in with Google / Apple」の基盤、エンタープライズSSO の標準。
概要
OpenID Connect (OIDC) はOpenID Foundation が2014年2月に標準化した認証プロトコル。OAuth 2.0 (2012年RFC 6749) の上に「認証」(Authentication) 層を追加・JWT (JSON Web Token) ベースのID Token を導入することで、ユーザの「アイデンティティ」情報をアプリに伝達する。Google / Microsoft / Apple / Yahoo / GitHub / Auth0 / Okta 等の主要IdP (Identity Provider) で採用、「Sign in with Google」「Sign in with Apple」ボタンの裏側技術、エンタープライズSSO (Single Sign-On) の現代標準。
OAuth 2.0 / OIDC 違い
| 項目 | OAuth 2.0 | OpenID Connect |
|---|---|---|
| 主目的 | 認可 (Authorization) | 認証 (Authentication) |
| Token | Access Token | ID Token + Access Token |
| Token 形式 | 不定 (実装依存) | JWT 必須 |
| ユーザ情報 | 別途UserInfo Endpoint | ID Token に含む |
| Standard Endpoint | /authorize, /token | + /userinfo, /jwks.json |
| Discovery | なし | /.well-known/openid-configuration |
ID Token (JWT) 構造
{
"iss": "https://accounts.google.com",
"sub": "112345678901234567890",
"aud": "your-app-client-id.apps.googleusercontent.com",
"exp": 1735689600,
"iat": 1735686000,
"email": "[email protected]",
"email_verified": true,
"name": "Alice Smith",
"picture": "https://lh3.googleusercontent.com/...",
"given_name": "Alice",
"family_name": "Smith",
"locale": "en"
}
JWT (Header.Payload.Signature) でデジタル署名・改竄不可・アプリ側で署名検証してユーザ情報取得。
主要Endpoint
| Endpoint | 機能 |
|---|---|
| /.well-known/openid-configuration | Discovery (全Endpoint 一覧) |
| /authorize | 認可 (ユーザログイン) |
| /token | Token交換 |
| /userinfo | 詳細User Info |
| /jwks.json | 公開鍵 (JWT検証用) |
| /revoke | Token 無効化 |
| /logout | End Session |
Discovery Endpoint で全URL を動的取得・実装簡素化。
Standard Claims
OIDC 標準のユーザ属性 (Claims):
| Claim | 内容 |
|---|---|
| sub | Subject (一意ID) |
| name | フルネーム |
| given_name | 名 |
| family_name | 姓 |
| middle_name | ミドルネーム |
| nickname | ニックネーム |
| preferred_username | ユーザ名 |
| profile | プロフィールURL |
| picture | プロフィール画像URL |
| website | Webサイト |
| メール | |
| email_verified | 検証済み |
| gender | 性別 |
| birthdate | 生年月日 |
| zoneinfo | タイムゾーン |
| locale | ロケール (ja-JP等) |
| phone_number | 電話番号 |
| phone_number_verified | 検証済み |
| address | 住所 (構造体) |
| updated_at | 最終更新 |
主要IdP (Identity Provider)
| プロバイダ | 採用 |
|---|---|
| OIDC + OAuth 2.0 (全Google ログイン) | |
| Microsoft (Entra ID・旧Azure AD) | エンタープライズ標準 |
| Apple | Sign in with Apple (2019-) |
| Yahoo | Yahoo ID連携 |
| GitHub | OAuth 2.0 → OIDC 移行中 |
| Facebook / Meta | 一部OIDC |
| Auth0 (Okta子会社) | エンタープライズ |
| Okta | エンタープライズ |
| Cognito (AWS) | クラウドネイティブ |
| Clerk | スタートアップ向け |
| Supabase Auth | OSS / Self-hosted |
| Keycloak | OSS / Self-hosted |
「Sign in with Apple」(2019-)
Apple が2019年WWDC 発表、App Store 規約でiOS / iPadOS / macOS / watchOS / tvOS アプリの第三者ログイン (Google/Facebook 等) 提供時に「Sign in with Apple」も提供義務化。プライバシ重視:
- Email Hide機能 (匿名ランダムメールアドレス)
- 2FA Apple ID 標準
- Apple がアクセス追跡しない
関連用語との違い
- vs OAuth 2.0: 認証 / 認可・OIDC は OAuth 2.0 上の拡張
- vs SAML 2.0: REST + JWT / SOAP + XML
- vs JWT 単体: 配信プロトコル / トークン形式
FAQ
Q1: OAuth 2.0 と OIDC どちら? A: 認証 (ユーザのアイデンティティ確認) が必要なら OIDC。API アクセス認可だけならOAuth 2.0 で十分。多くの実装は両方併用。
Q2: ID Token をAPI 認証に使う? A: 推奨しない。ID Token は認証用 / Access Token はAPI 用と用途分離。ただし簡素実装でID Token 流用は実際多い。
Q3: 個人プロジェクト? A: Clerk / Auth0 / Supabase Auth がOIDC + OAuth 2.0 を抽象化、数行のコードで実装可能。自家OIDC 実装は脆弱性リスク大。