Open3

RFC 8414 OAuth 2.0 Authorization Server Metadata

yapooyapoo

RFC 8414 - OAuth 2.0 Authorization Server Metadata

概要

認可サーバーは OAuth 2.0 クライアントに対して JSON または JWT で認可サーバーに関する情報 (Authorization Server Metadata) を提供することができる。この仕様では返却できる情報を定めているが、ここで定められていないものを返却してもよい。

yapooyapoo

Authorization Server Metadata

Authorization Server Metadata として本仕様やその他の拡張仕様では以下の JSON を定義している (key に関して、長いものは途中で改行を入れている)。

key description
issuer (必須) 認可サーバーの識別子であり、URL。 https でクエリやフラグメントを含まないが、パスは含んでも良い。例えば https://authorization.example.comhttps://authorization.example.com/v2 など
authorization_endpoint 認可エンドポイントの URL。認可エンドポイントを用いる grant_type をサポートする場合には必須
token_endpoint トークンエンドポイントの URL。インプリシットフローのみサポートする場合を除いて必須
jwks_uri (任意) JWKs エンドポイントの URL。
registration_endpoint (任意) Client Registration Endpoint[1] の URL。
scopes_supported (推奨) サポートするスコープの一覧
response_types_supported (必須) 認可エンドポイントでサポートする response_type の一覧
response_modes_supported (任意) サポートする response_mode の一覧
grant_types_supported (任意) トークンエンドポイントがサポートする grant_type の一覧。省略された場合は ["authorization_code", "implicit"]
token_endpoint_auth_
methods_supported
(任意) トークンエンドポイントでのクライアント認証の方法のリスト。省略された場合は ["client_secret_basic"]
token_endpoint_auth_
signing_alg_values_supported
トークンエンドポイントのクライアント認証で client_secret_jwt または client_secret_jwt [2] をサポートする場合には必須。JWT の署名アルゴリズム (alg) としてサポートされているもののリスト。none を指定してはならない。RS256 はサポートするべきである。
service_documentation (任意) 認可サーバーに関する (人間が読むための) ドキュメントの URL
ui_locales_supported (任意) 画面上の表示などでサポートされている言語の一覧。RFC 5646 で定められた言語タグのリスト。
op_policy_uri (任意) 認可サーバーに登録するクライアントに向けた文書の URL。この文書ではクライアントは認可サーバーから取得したデータをどのように用いることが要求されているかが記載されている。キーに op_ と付いているが、OpenID Connect に限定した記述ではなく OAuth 2.0 としての一般的な記載内容で良い。
op_tos_uri (任意) 認可サーバーに登録するクライアントに向けた利用規約の文書の URL。これも OpenID Connect に限定した記述でなくてよい。
revocation_endpoint (任意) トークンリボケーションエンドポイント[3]の URL
revocation_endpoint_auth_
methods_supported
(任意) トークンリボケーションエンドポイントのクライアント認証の方法のリスト。省略された場合は ["client_secret_basic"]
revocation_endpoint_auth_
signing_alg_values_supported
(任意) token_endpoint_auth_signing_alg_values_supported と同様だが、こちらはトークンリボケーションエンドポイントに関するもの
introspection_endpoint (任意) トークンイントロスペクションエンドポイント[4]の URL
introspection_endpoint_auth_
methods_supported
(任意) トークンイントロスペクションエンドポイントのクライアント認証方式のリスト。省略された場合は別の方法でクライアント認証方式を共有しなければならない
introspection_endpoint_auth_
signing_alg_values_supported
(任意) token_endpoint_auth_signing_alg_values_supported と同様だが、こちらはトークンイントロスペクションエンドポイントに関するもの
code_challenge_methods_supported (任意) 認可エンドポイントの code_challenge_method [5]でサポートしている値のリスト。
device_authorization_endpoint (任意) デバイス認可エンドポイント[6]の URL

signed_metadata

Authorization Server Metadata は上記の JSON をペイロードとして持つ JWT でも良い。このとき、Authorization Server Metadata は以下の形式になる。

{
 "signed_metadata": "Authorization Server Metadata の JWT"
}
脚注
  1. RFC 7591 ↩︎

  2. OpenID Connect Core 1.0 Section 9 ↩︎

  3. RFC 7009 ↩︎

  4. RFC 7662 ↩︎

  5. RFC 7636 ↩︎

  6. RFC 8628 ↩︎

yapooyapoo

Authorization Server Metadata の取得方法

Authorization Server Metadata を取得するには、特定のエンドポイントに GET リクエストすれば良い。このエンドポイントのホストは Authorization Server Metadata の issuer と同一でなければならない。

パスは (issuer で定義されているパスを除いて) /.well-known から始まらなければならない。デフォルトでは /.well-known/oauth-authorization-server だが、別のパスでも良い。/.well-known/openid-configuration を用いることもできる。

Authorization Server Metadata を取得したクライアントは、Metadata の中の issuer がリクエストした URL と矛盾しないことを検証しなければならない。