OpenID Connect Core 1.0

OpenID Connect Core 1.0

OAuth 2.0の上に認証レイヤーを追加し、ID Token、UserInfo、標準Claimsによる本人確認を定義します。

STATUSIdentity layer on OAuth 2.0FLOWS3 documentedPrimary specification ↗

この仕様は、
何を解決するのか。

ログイン、SSO、ID Token、UserInfoを正しく実装し、OAuthの認可との違いを理解したい人向けです。

OpenID ConnectはOAuth 2.0の上に本人確認の仕組みを追加する認証仕様です。OAuthのアクセストークンはAPIを利用するための許可証ですが、それだけでは『ログインした人が誰か』をClientが安全に判断できません。

OIDCでは認可リクエストへopenid scopeを追加し、認証結果を署名付きJWTであるID Tokenとして受け取ります。Clientは署名だけでなく、issuer、audience、有効期限、nonceを検証し、自分のために発行された新しい認証結果であることを確認します。

仕様が定める、大切なこと。

01

認証結果を標準化する

ID Tokenのclaimsによって、誰が、どのProviderで、いつ認証されたかをClientへ伝えます。

02

複数サービスでログインを共有する

Clientごとにパスワードを管理せず、信頼するOpenID Providerへ本人確認を集約できます。

03

プロフィール取得を共通化する

UserInfo Endpointと標準claimsにより、sub、name、emailなどの受け渡し方法を統一します。

01ID Token02openid Scope03Nonce04UserInfo05Standard Claims

安全に使うための確認事項。

仕様を実装するときは、正常系の通信だけでなく、値のすり替え、再利用、漏えいが起きた場合も考えます。

  1. 01

    ID Tokenはアクセストークンの代わりにAPIへ送らず、Clientが認証結果を確認するために使います。

  2. 02

    JWKSで署名を検証し、iss、aud、exp、iat、nonceを用途に応じて確認します。

  3. 03

    subをユーザーの安定した識別子として使い、表示名やemailだけでアカウントを結び付けません。

  4. 04

    UserInfoを利用する場合、応答のsubがID Tokenのsubと一致することを確認します。

この仕様に属するフロー

ほかの仕様との関係

OIDC CoreはOAuth 2.0 Authorization Code Flowを利用します。DiscoveryはProviderのEndpointや機能を公開し、Dynamic RegistrationはClient登録を標準化します。CIBAはブラウザリダイレクトを使わないOIDCの追加認証フローです。

OAuth 2.0 (RFC 6749)The OAuth 2.0 Authorization Framework→OAuth 2.0 Device Authorization (RFC 8628)OAuth 2.0 Device Authorization Grant→OAuth 2.1OAuth 2.1 Authorization Framework→FIDO2 WebAuthn Level 3Web Authentication: Public Key Credentials→FIDO2 CTAP 2.2Client to Authenticator Protocol→FIDO UAF 1.1Universal Authentication Framework→FIDO U2F 1.2Universal Second Factor→OpenID Connect CIBA Core 1.0Client-Initiated Backchannel Authentication→OAuth 2.0 PKCE (RFC 7636)Proof Key for Code Exchange by OAuth Public Clients→JSON Web Token (RFC 7519)JSON Web Token (JWT)→OAuth 2.0 DPoP (RFC 9449)OAuth 2.0 Demonstrating Proof of Possession→SAML 2.0Security Assertion Markup Language 2.0→SCIM 2.0 (RFC 7644)System for Cross-domain Identity Management: Protocol→