AnazonのDick Hardt氏が「Distributed OAuth」という仕様を提案している。
昨年行われたIETF100でも議論があり、来週行われるOAuth WG Virtual Meetingでも話が進められるようだ。
遅らせばながら簡単に読んで見る。
Distributed OAuthとは
通常のOAuth2では、一つのリソースサーバと一つの認可サーバがあり、その関係は固定的です。この提案仕様では、もっと複雑で大きなケースを想定しています。
同様の機能を持つ複数のリソースサーバと、リソースサーバごとに別の認可サーバがあるようなケースです。
IETF100の発表資料を見るとイメージは湧きやすいでしょう(あくまで例だと思います)

( https://datatracker.ietf.org/meeting/100/materials/slides-100-oauth-sessa-distributed-oauth/ )
Distributed OAuthでは、クライアントがリソースの認可を行う認可サーバをリソースサーバに問い合わせることで、そのリソースサーバと関連する認可サーバを知れるようにする提案仕様です。
Distributed OAuthフロー

- (A) クライアントは認可サーバを見つけるために、Authorizationヘッダをつけずリソースサーバにリクエストを送信する (この時TLS通信で得られた証明書から、hostを取得しておく)
- (B) リソースサーバは401レスポンスを返す。WWW-Authenticateヘッダのissにトークンを発行する認可サーバのエンドポイントを指定する
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example_realm",
iss="http://issuer.example.com/token",
scope="example_scope",
error="invalid_token"
POST /token HTTP/1.1
Host: issuer.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&scope="example scope"
&host=resource.example.com
&realm="example_realm"