Open3

RFC 7592 OAuth 2.0 Dynamic Client Registration Management Protocol

yapooyapoo

RFC 7592 - OAuth 2.0 Dynamic Client Registration Management Protocol

概要

RFC 7592 は OAuth 2.0 のクライアントが登録情報 (Client Metadata) の参照・更新・削除[1]を行うためのエンドポイント Client Configuration Endpoint の仕様を定義する。

クライアントは Client Configuration Endpoint の URL とこのエンドポイントを用いるためのアクセストークン (Registration Access Token) を Client Registration Endpoint で得る。このため本仕様では Client Registration Endpoint のレスポンス Client Information Response が RFC 7591 から拡張されている。

なお、本仕様は Experimental である。

脚注
  1. ここでいう「削除」は Client Metadata の中の一部の項目を削除することではなく (それは更新で行う)、クライアントとしての登録を削除することである。 ↩︎

yapooyapoo

Client Information Response の拡張

Client Information Response ではクライアントが Client Configuration Endpoint を利用するために以下の値を返却する。ともに REQUIRED である。

  • registration_client_uri : Client Configuration Endpoint の URL
  • registration_access_token: Client Configuration Endpoint を用いるためのアクセストークン (これは Bearer Token)

以下は Section 3 で示されるレスポンスの例である。

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
 "registration_access_token": "reg-23410913-abewfq.123483",
 "registration_client_uri":
    "https://server.example.com/register/s6BhdRkqt3",
 "client_id": "s6BhdRkqt3",
 "client_secret": "cf136dc3c1fc93f31185e5885805d",
 "client_id_issued_at": 2893256800,
 "client_secret_expires_at": 2893276800,
 "client_name": "My Example Client",
 "client_name#ja-Jpan-JP":
    "\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u540D",
 "redirect_uris": [
   "https://client.example.org/callback",
   "https://client.example.org/callback2"],
 "grant_types": ["authorization_code", "refresh_token"],
 "token_endpoint_auth_method": "client_secret_basic",
 "logo_uri": "https://client.example.org/logo.png",
 "jwks_uri": "https://client.example.org/my_public_keys.jwks"
}
yapooyapoo

Client Configuration Endpoint

Client Configuration Endpoint でクライアントは Client Metadata の参照・更新・削除を行う。URL とこのエンドポイントを用いるのに必要なアクセストークンは上述の通り Client Information Response で得られる。

参照

registration_client_uri に GET リクエストすればよい。レスポンスは Client Information Response である。このとき client_secretregistration_access_token はクライアントが既に得ているものと異なる場合がある。

このエンドポイントはアクセストークン (registration_access_token) で保護されたものであるから、アクセストークンが不正な場合のレスポンスは RFC 6750 で定義されたものに従う。

更新

registration_client_uri に PUT リクエストする。リクエストボディは Client Information Response で得られた JSON (変更を所望する値は更新したもの) で、以下の点に留意する必要がある。

  • リクエストボディの中で省略された項目に関しては、その値を削除することを意図したものとして扱われる
  • registration_access_token, registration_client_uri, client_secret_expires_at, client_id_issued_at を含めてはならない。
  • client_secret をリクエストボディの中に含めてもよいが、これは以前発行されたものと一致しなければならない。仮に異なる値を指定した場合も、client_secret を更新することはできない。
  • 認可サーバーは不正な値がリクエストされた場合、その値を認可サーバーにおけるデフォルト値に置き換えてもよい

レスポンスの仕様は参照の場合と同じ。

削除

registration_client_uri に DELETE リクエストする。リクエストボディはない。認可サーバーはこのリクエストを受けて client_id, client_secret, registration_access_token を無効化する。また、可能であれば発行済の認可グラント、アクセストークン、リフレッシュトークン、その他トークン[1]を無効化する。認可サーバーはクライアントの削除後にステータスコード 204 (No Conent) でレスポンスを返却する。

認可サーバーとしてクライアントの削除をサポートしない場合は 405 (Method Not Allowed) を返却し、当該クライアントの削除は許可しない場合は 403 (Forbidden) を返却する。その他のエラーに関しては参照の場合と同じ。

脚注
  1. その他のトークンというのはよくわからないが、今後の OAuth 2.0 の拡張を踏まえての記述だろうか ↩︎