RFC 8414 OAuth 2.0 Authorization Server Metadata
RFC 8414 - OAuth 2.0 Authorization Server Metadata
概要
認可サーバーは OAuth 2.0 クライアントに対して JSON または JWT で認可サーバーに関する情報 (Authorization Server Metadata) を提供することができる。この仕様では返却できる情報を定めているが、ここで定められていないものを返却してもよい。
Authorization Server Metadata
Authorization Server Metadata として本仕様やその他の拡張仕様では以下の JSON を定義している (key に関して、長いものは途中で改行を入れている)。
key | description |
---|---|
issuer | (必須) 認可サーバーの識別子であり、URL。 https でクエリやフラグメントを含まないが、パスは含んでも良い。例えば https://authorization.example.com や https://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"
}
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 と矛盾しないことを検証しなければならない。