Skip to content

MS_OIDCDiscovery

nishi_74322014 edited this page Sep 1, 2026 · 1 revision

OpenID Connect - Discovery

概要

Final を参照して記述。

  • Client(RP)がメールアドレスや URL からユーザが利用している IdP/STS(OP)を特定する方法

補足(Discovery は 2 段構え): 本ページの内容は
(1) OP ディスカバリ(利用者の識別子から OP を突き止める、WebFinger)と
(2) OP 構成情報(その OP のエンドポイントや対応アルゴリズムを取得する、
/.well-known/openid-configuration)の 2 段に分かれている。
実務で使われるのはほぼ (2) だけで、(1) の WebFinger は
**「利用者にメール アドレスを入力させて自動的に IdP を選ぶ」**という
用途に限られるため、実装している OP は多くない。

詳細

TLS サポートと、TLS 証明書のチェックが必要。

OPディスカバリ

OPディスカバリのパラメタ

  • Resource

    • エンドユーザの識別子。
    • 必要に応じて正規化が行われる。
    • 以下のエンドユーザの識別子がある。
      • メアド
      • URL
      • ホスト名とポート
  • Host
    Simple Web Discovery サービスがホストされているサーバ

  • Rel
    サービスのタイプを識別する URI

    • 型: OpenID Connect Issuer
    • 値: http://openid.net/specs/connect/1.0/issuer

リクエスト・レスポンスの例

  • 共通項

    • rel
      http://openid.net/specs/connect/1.0/issuer

    • host

      • example.com
      • 若しくは、Resource 中の host 部分
  • リクエスト

    • メアド

      • value : joe@example.com
      • resource: acct:joe@example.com
      GET /.well-known/webfinger
        ?resource=acct%3Ajoe%40example.com
        &rel=http%3A%2F%2Fopenid.net%2Fspecs%2Fconnect%2F1.0%2Fissuer
        HTTP/1.1
      Host: example.com
      
    • URL

      • value : https://example.com/joe
      • resource: https://example.com/joe
      GET /.well-known/webfinger
        ?resource=https%3A%2F%2Fexample.com%2Fjoe
        &rel=http%3A%2F%2Fopenid.net%2Fspecs%2Fconnect%2F1.0%2Fissuer
        HTTP/1.1
      Host: example.com
      
    • ホスト名とポート

      • value : example.com:8080
      • resource: https://example.com:8080/
      GET /.well-known/webfinger
        ?resource=https%3A%2F%2Fexample.com%3A8080%2F
        &rel=http%3A%2F%2Fopenid.net%2Fspecs%2Fconnect%2F1.0%2Fissuer
        HTTP/1.1
      Host: example.com:8080
      
    • acct URI スキーム

      • value : acct:juliet%40capulet.example@shopping.example.com
      • resource: acct:juliet%40capulet.example@shopping.example.com
      GET /.well-known/webfinger
        ?resource=acct%3Ajuliet%2540capulet.example%40shopping.example.com
        &rel=http%3A%2F%2Fopenid.net%2Fspecs%2Fconnect%2F1.0%2Fissuer
        HTTP/1.1
      Host: shopping.example.com
      
  • レスポンス

    HTTP/1.1 200 OK
    Content-Type: application/jrd+json
    {
     "subject": "xxxxxx",
     "links":
      [
       {
        "rel": "http://openid.net/specs/connect/1.0/issuer",
        "href": "https://server.example.com"
       }
      ]
    }

    subject には、要求した Resource の値が入る。

OP構成情報

issuer/.well-known/openid-configuration を連結した URL を使用。

OP構成情報の要求

GET /.well-known/openid-configuration HTTP/1.1
Host: example.com

OP構成情報の応答

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

{
 "issuer":
   "https://server.example.com",
 "authorization_endpoint":
   "https://server.example.com/connect/authorize",
 "token_endpoint":
   "https://server.example.com/connect/token",
 "token_endpoint_auth_methods_supported":
   ["client_secret_basic", "private_key_jwt"],
 "token_endpoint_auth_signing_alg_values_supported":
   ["RS256", "ES256"],
 "userinfo_endpoint":
   "https://server.example.com/connect/userinfo",
 "check_session_iframe":
   "https://server.example.com/connect/check_session",
 "end_session_endpoint":
   "https://server.example.com/connect/end_session",
 "jwks_uri":
   "https://server.example.com/jwks.json",
 "registration_endpoint":
   "https://server.example.com/connect/register",
 "scopes_supported":
   ["openid", "profile", "email", "address",
    "phone", "offline_access"],
 "response_types_supported":
   ["code", "code id_token", "id_token", "token id_token"],
 "acr_values_supported":
   ["urn:mace:incommon:iap:silver",
    "urn:mace:incommon:iap:bronze"],
 "subject_types_supported":
   ["public", "pairwise"],
 "userinfo_signing_alg_values_supported":
   ["RS256", "ES256", "HS256"],
 "userinfo_encryption_alg_values_supported":
   ["RSA1_5", "A128KW"],
 "userinfo_encryption_enc_values_supported":
   ["A128CBC-HS256", "A128GCM"],
 "id_token_signing_alg_values_supported":
   ["RS256", "ES256", "HS256"],
 "id_token_encryption_alg_values_supported":
   ["RSA1_5", "A128KW"],
 "id_token_encryption_enc_values_supported":
   ["A128CBC-HS256", "A128GCM"],
 "request_object_signing_alg_values_supported":
   ["none", "RS256", "ES256"],
 "display_values_supported":
   ["page", "popup"],
 "claim_types_supported":
   ["normal", "distributed"],
 "claims_supported":
   ["sub", "iss", "auth_time", "acr",
    "name", "given_name", "family_name", "nickname",
    "profile", "picture", "website",
    "email", "email_verified", "locale", "zoneinfo",
    "http://example.info/claims/groups"],
 "claims_parameter_supported":
   true,
 "service_documentation":
   "http://server.example.com/connect/service_documentation.html",
 "ui_locales_supported":
   ["en-US", "en-GB", "en-CA", "fr-FR", "fr-CA"]
}

パラメタ

  • 追加のパラメタを定義可能
  • Session Managementなど、他の仕様で定義されているものもある。

基本要素

  • issuer (REQUIRED)

    • WebFinger から返される issuer の値(href)と同じ
    • Query や Fragment の Component を含まない https スキームの URL
  • op_policy_uri (OPTIONAL)
    Client を登録する人に向けて OP の要求事項を提供する URL。

  • op_tos_uri (OPTIONAL)
    Client を登録する人に向けて OP の利用規約を提供する URL。

移行メモ(衍字): 「Client を登録する人に向けて」(2 箇所)の
衍字を修正した。

補足(issuer の一致確認は必須): 構成情報の issuer は、
取得先の URL および ID トークンの iss クレームと
完全に一致していなければならない
ここを検証しないと、攻撃者の用意した構成情報を掴まされる
(IdP Mix-Up 攻撃)恐れがある。

エンドポイント

OAuth 2.0 のエンドポイント

Registration のエンドポイント

OpenID Connect - Dynamic Client Registrationを参照)

  • registration_endpoint (RECOMMENDED)
    動的クライアント登録エンドポイントの URL

  • service_documentation (OPTIONAL)

    • 開発者向け情報ページの URL。
    • Dynamic Client Registration をサポートしていない場合

Requestオブジェクト関連のエンドポイント

OpenID Connect - Requestオブジェクトを参照)

Session Management

OpenID Connect の Session Management)

  • refresh_session_endpoint
    リフレッシュ・セッション・エンドポイントの URL

  • end_session_endpoint
    エンド・セッション・エンドポイントの URL

署名・暗号化

JWK

移行メモ(パラメタ名): 実際の仕様およびサンプル JSON では
jwks_uri である(jwk_url は Discovery の draft 段階の名前)。
本ページの他の箇所やサンプルでは jwks_uri が使われている。

アルゴリズム

JWSJWE のアルゴリズム(JWA)のリストを含む JSON 配列

  • Token エンドポイント関連
    client_secret_jwt、および private_key_jwt 認証

    • token_endpoint_auth_signing_alg_values_supported (OPTIONAL)
      • JWS 署名アルゴリズム(alg 値)
      • RS256 をサポートしなければならない(none はダメ)。
  • ID トークン関連

    • id_token_signing_alg_values_supported (REQUIRED)

      • JWS 署名アルゴリズム(alg 値)
      • RS256 をサポートしなければならない(none はダメ)。
    • id_token_encryption_alg_values_supported (OPTIONAL)
      JWE 暗号化アルゴリズム(alg 値)

    • id_token_encryption_enc_values_supported (OPTIONAL)
      JWE 暗号化アルゴリズム(enc 値)

  • ユーザ情報エンドポイント関連

    • userinfo_signing_alg_values_supported (OPTIONAL)

      • JWS 署名アルゴリズム(alg 値)
      • none を含めることができる。
    • userinfo_encryption_alg_values_supported (OPTIONAL)
      JWE 暗号化アルゴリズム(alg 値)

    • userinfo_encryption_enc_values_supported (OPTIONAL)
      JWE 暗号化アルゴリズム(enc 値)

  • Request オブジェクト関連

    • request_object_signing_alg_values_supported (OPTIONAL)

      • JWS 署名アルゴリズム(alg 値)
      • none と RS256 をサポートしなければならない。
    • request_object_encryption_alg_values_supported (OPTIONAL)
      JWE 暗号化アルゴリズム(alg 値)

    • request_object_encryption_enc_values_supported (OPTIONAL)
      JWE 暗号化アルゴリズム(enc 値)

補足(algenc の役割分担): JWE
algコンテンツ暗号鍵(CEK)をどう受け渡すか(RSA1_5、A128KW など)、
enc本文を何で暗号化するか(A128CBC-HS256、A128GCM など)を表す。
上記のパラメタが algenc で対になっているのはこのためである。

各種オプション

OAuth 2.0 / OIDC のオプション

  • response_types_supported (REQUIRED)
    サポートする response_type 値のリストを含む JSON 配列

  • scopes_supported (RECOMMENDED)
    サポートする scope 値のリストを含む JSON 配列

  • response_modes_supported (OPTIONAL)

    • サポートする response_mode 値の JSON 配列
    • 既定値は ["query", "fragment"]
  • grant_types_supported (OPTIONAL)

    • サポートする grant_type 値の JSON 配列
    • 既定値は ["authorization_code", "implicit"]

OIDC 固有のオプション

  • subject_types_supported (REQUIRED)
    サポートする sub クレームの種類の JSON 配列

    • public(既定値)
    • pairwise
  • claims

    • claims_parameter_supported (OPTIONAL)
      • claims パラメタのサポート
      • 既定値は false
    • claims_supported (RECOMMENDED)
      クレーム名のリストを含む JSON 配列
  • acr_values_supported (OPTIONAL)
    サポートする認証コンテキストクラス参照のリストを含む
    OpenID Connect - Authentication Context Class Referenceを参照)

  • その他

    • display_values_supported (OPTIONAL)
    • claim_types_supported (OPTIONAL)
    • ロケール
      • claims_locales_supported (OPTIONAL)
      • ui_locales_supported (OPTIONAL)

Requestオブジェクト関連のオプション

OpenID Connect - Requestオブジェクトを参照)

  • request パラメタ

    • request_parameter_supported (OPTIONAL)
      • request パラメタのサポート
      • 既定値は false
  • request_uri パラメタ

    • request_uri_parameter_supported (OPTIONAL)
      • request_uri パラメタのサポート
      • 既定値は false
    • require_request_uri_registration (OPTIONAL)
      • request_uri 事前登録の要否
      • 既定値は false

参考

RFC 8414 - OAuth 2.0 Authorization Server Metadata

https://tools.ietf.org/html/rfc8414

補足(RFC 8414 との関係): /.well-known/openid-configuration
OpenID Connect の仕様だが、後に OAuth 2.0 単体でも同じことをしたいという
要求から RFC 8414(/.well-known/oauth-authorization-server)が定義された。
内容はほぼ同じで、多くの実装は両方のパスで同じ JSON を返す。

本 Wiki 内


Tags: IT国際標準, 認証基盤, クレームベース認証, OAuth

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally