RFC 9449 · 英日対訳
OAuth 2.0 Demonstrating Proof of Possession (DPoP)
英語本文は RFC Editor が公開した RFC そのもので、著作権は IETF Trust と文書の著者にあり、IETF Trust Legal Provisions に基づいて転載している。日本語は非公式の機械翻訳で、正文は英語のみ。例・図・参考文献は英語のまま表示する。
100% の段落を翻訳済み · 機械翻訳: Claude Fable 5.1 · 2026-11-13
目次
- 概要
- 1 はじめに
- 1.1 規約と用語
- 2 目的
- 3 コンセプト
- 4 DPoP プルーフ JWT
- 4.1 DPoP HTTP ヘッダー
- 4.2 DPoP プルーフ JWT の構文
- 4.3 DPoP プルーフの検査
- 5 DPoP アクセストークンリクエスト
- 5.1 認可サーバーメタデータ
- 5.2 クライアント登録メタデータ
- 6 公開鍵の確認
- 6.1 JWK Thumbprint 確認方式
- 6.2 トークンイントロスペクションにおける JWK Thumbprint 確認方式
- 7 保護リソースへのアクセス
- 7.1 DPoP 認証スキーム
- 7.2 Bearer 認証スキームとの互換性
- 7.3 クライアントに関する考慮事項
- 8 認可サーバーが提供するノンス
- 8.1 ノンスの構文
- 8.2 新しいノンス値の提供
- 9 リソースサーバーが提供するノンス
- 10 認可コードの DPoP 鍵への紐付け
- 10.1 Pushed Authorization Request と DPoP
- 11 セキュリティに関する考慮事項
- 11.1 DPoP プルーフのリプレイ
- 11.2 DPoP プルーフの事前生成
- 11.3 DPoP ノンスのダウングレード
- 11.4 クライアントのコンテキストにおける信頼できないコード
- 11.5 署名付き JWT のすり替え
- 11.6 署名アルゴリズム
- 11.7 リクエストの完全性
- 11.8 アクセストークンと公開鍵の紐付け
- 11.9 認可コードと公開鍵の紐付け
- 11.10 ハッシュアルゴリズムのアジリティ
- 11.11 クライアントアイデンティティへの紐付け
- 12 IANA に関する考慮事項
- 12.1 OAuth アクセストークンタイプの登録
- 12.2 OAuth 拡張エラーの登録
- 12.3 OAuth パラメータの登録
- 12.4 HTTP 認証スキームの登録
- 12.5 メディアタイプの登録
- 12.6 JWT 確認方式の登録
- 12.7 JSON Web Token クレームの登録
- 12.7.1 "nonce" の登録更新
- 12.8 Hypertext Transfer Protocol (HTTP) フィールド名の登録
- 12.9 OAuth 認可サーバーメタデータの登録
- 12.10 OAuth 動的クライアント登録メタデータ
- 13 参照文献
- 13.1 引用規格
- 13.2 参考文献
- 謝辞
Abstract
概要
This document describes a mechanism for sender-constraining OAuth 2.0 tokens via a proof-of-possession mechanism on the application level. This mechanism allows for the detection of replay attacks with access and refresh tokens.
本文書は、アプリケーション層の所有証明 (proof-of-possession) メカニズムによって OAuth 2.0 のトークンを送信者制約 (sender-constraining) するメカニズムを記述する。このメカニズムにより、アクセストークンおよびリフレッシュトークンに対するリプレイ攻撃を検出できるようになる。
1.Introduction
1.はじめに
Demonstrating Proof of Possession (DPoP) is an application-level mechanism for sender-constraining OAuth [RFC6749] access and refresh tokens. It enables a client to prove the possession of a public/ private key pair by including a DPoP header in an HTTP request. The value of the header is a JSON Web Token (JWT) [RFC7519] that enables the authorization server to bind issued tokens to the public part of a client's key pair. Recipients of such tokens are then able to verify the binding of the token to the key pair that the client has demonstrated that it holds via the DPoP header, thereby providing some assurance that the client presenting the token also possesses the private key. In other words, the legitimate presenter of the token is constrained to be the sender that holds and proves possession of the private part of the key pair.
Demonstrating Proof of Possession (DPoP) は、OAuth [RFC6749] のアクセストークンとリフレッシュトークンを送信者制約するためのアプリケーション層のメカニズムである。これにより、クライアントは HTTP リクエストに DPoP ヘッダーを含めることで、公開鍵/秘密鍵ペアの所有を証明できる。このヘッダーの値は JSON Web Token (JWT) [RFC7519] であり、認可サーバーが発行するトークンをクライアントの鍵ペアの公開部分に結び付けることを可能にする。そのようなトークンの受領者は、クライアントが DPoP ヘッダーを通じて保持していることを示した鍵ペアとトークンとの結び付きを検証でき、それによって、トークンを提示するクライアントが秘密鍵も所有していることについてある程度の保証を得られる。言い換えると、トークンの正当な提示者は、鍵ペアの秘密部分を保持しその所有を証明する送信者に制約される。
The mechanism specified herein can be used in cases where other methods of sender-constraining tokens that utilize elements of the underlying secure transport layer, such as [RFC8705] or [TOKEN-BINDING], are not available or desirable. For example, due to a sub-par user experience of TLS client authentication in user agents and a lack of support for HTTP token binding, neither mechanism can be used if an OAuth client is an application that is dynamically downloaded and executed in a web browser (sometimes referred to as a "single-page application"). Additionally, applications that are installed and run directly on a user's device are well positioned to benefit from DPoP-bound tokens that guard against the misuse of tokens by a compromised or malicious resource. Such applications often have dedicated protected storage for cryptographic keys.
ここで規定するメカニズムは、[RFC8705] や [TOKEN-BINDING] のように下位のセキュアなトランスポート層の要素を利用する他のトークン送信者制約手法が利用できない、または望ましくない場合に使用できる。例えば、ユーザーエージェントにおける TLS クライアント認証のユーザー体験が劣ることと、HTTP トークンバインディングのサポートが欠けていることから、OAuth クライアントが Web ブラウザ内で動的にダウンロードされ実行されるアプリケーション (「シングルページアプリケーション」と呼ばれることもある) である場合は、どちらのメカニズムも使用できない。さらに、ユーザーのデバイスに直接インストールされて動作するアプリケーションは、侵害された、または悪意のあるリソースによるトークンの悪用を防ぐ DPoP バウンドトークンの恩恵を受けやすい立場にある。そのようなアプリケーションは、暗号鍵のための専用の保護されたストレージを備えていることが多い。
DPoP can be used to sender-constrain access tokens regardless of the client authentication method employed, but DPoP itself is not used for client authentication. DPoP can also be used to sender-constrain refresh tokens issued to public clients (those without authentication credentials associated with the client_id).
DPoP は、用いられるクライアント認証方式にかかわらずアクセストークンの送信者制約に使用できるが、DPoP 自体はクライアント認証には使用されない。DPoP は、パブリッククライアント (client_id に関連付けられた認証クレデンシャルを持たないクライアント) に発行されるリフレッシュトークンの送信者制約にも使用できる。
1.1.Conventions and Terminology
1.1.規約と用語
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
本文書中のキーワード「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「NOT RECOMMENDED」「MAY」および「OPTIONAL」は、ここに示すようにすべて大文字で現れる場合に限り、BCP 14 [RFC2119] [RFC8174] に記述されるとおりに解釈される。
This specification uses the Augmented Backus-Naur Form (ABNF) notation of [RFC5234].
本仕様は [RFC5234] の Augmented Backus-Naur Form (ABNF) 記法を使用する。
This specification uses the terms "access token", "refresh token", "authorization server", "resource server", "authorization endpoint", "authorization request", "authorization response", "token endpoint", "grant type", "access token request", "access token response", "client", "public client", and "confidential client" defined by "The OAuth 2.0 Authorization Framework" [RFC6749].
本仕様は、「The OAuth 2.0 Authorization Framework」[RFC6749] で定義される用語「アクセストークン (access token)」「リフレッシュトークン (refresh token)」「認可サーバー (authorization server)」「リソースサーバー (resource server)」「認可エンドポイント (authorization endpoint)」「認可リクエスト (authorization request)」「認可レスポンス (authorization response)」「トークンエンドポイント (token endpoint)」「グラントタイプ (grant type)」「アクセストークンリクエスト (access token request)」「アクセストークンレスポンス (access token response)」「クライアント (client)」「パブリッククライアント (public client)」および「コンフィデンシャルクライアント (confidential client)」を使用する。
The terms "request", "response", "header field", and "target URI" are imported from [RFC9110].
用語「リクエスト (request)」「レスポンス (response)」「ヘッダーフィールド (header field)」および「ターゲット URI (target URI)」は [RFC9110] から取り入れる。
The terms "JOSE" and "JOSE Header" are imported from [RFC7515].
用語「JOSE」および「JOSE ヘッダー (JOSE Header)」は [RFC7515] から取り入れる。
This document contains non-normative examples of partial and complete HTTP messages. Some examples use a single trailing backslash to indicate line wrapping for long values, as per [RFC8792]. The character and leading spaces on wrapped lines are not part of the value.
本文書には、部分的および完全な HTTP メッセージの非規範的な例が含まれる。いくつかの例では、[RFC8792] に従い、長い値の行折り返しを示すために行末の単一のバックスラッシュを使用している。この文字と、折り返された行の先頭の空白は値の一部ではない。
2.Objectives
2.目的
The primary aim of DPoP is to prevent unauthorized or illegitimate parties from using leaked or stolen access tokens, by binding a token to a public key upon issuance and requiring that the client proves possession of the corresponding private key when using the token. This constrains the legitimate sender of the token to only the party with access to the private key and gives the server receiving the token added assurances that the sender is legitimately authorized to use it.
DPoP の主な目的は、発行時にトークンを公開鍵に結び付け、トークンの使用時にクライアントが対応する秘密鍵の所有を証明することを要求することで、権限のない、または不正な第三者が漏洩または盗難されたアクセストークンを使用するのを防ぐことである。これにより、トークンの正当な送信者は秘密鍵にアクセスできる当事者のみに制約され、トークンを受け取るサーバーは、送信者がそのトークンを使用する正当な権限を持っていることについて追加の保証を得る。
Access tokens that are sender-constrained via DPoP thus stand in contrast to the typical bearer token, which can be used by any party in possession of such a token. Although protections generally exist to prevent unintended disclosure of bearer tokens, unforeseen vectors for leakage have occurred due to vulnerabilities and implementation issues in other layers in the protocol or software stack (see, e.g., Compression Ratio Info-leak Made Easy (CRIME) [CRIME], Browser Reconnaissance and Exfiltration via Adaptive Compression of Hypertext (BREACH) [BREACH], Heartbleed [Heartbleed], and the Cloudflare parser bug [Cloudbleed]). There have also been numerous published token theft attacks on OAuth implementations themselves ([GitHub.Tokens] is just one high-profile example). DPoP provides a general defense in depth against the impact of unanticipated token leakage. DPoP is not, however, a substitute for a secure transport and MUST always be used in conjunction with HTTPS.
したがって、DPoP によって送信者制約されたアクセストークンは、トークンを所持するいかなる当事者でも使用できる典型的なベアラートークンとは対照的である。ベアラートークンの意図しない開示を防ぐ保護は一般に存在するものの、プロトコルやソフトウェアスタックの他の層における脆弱性や実装上の問題によって、予期しない漏洩経路が生じてきた (例えば、Compression Ratio Info-leak Made Easy (CRIME) [CRIME]、Browser Reconnaissance and Exfiltration via Adaptive Compression of Hypertext (BREACH) [BREACH]、Heartbleed [Heartbleed]、Cloudflare のパーサーのバグ [Cloudbleed] を参照)。OAuth 実装そのものに対するトークン窃取攻撃も数多く公表されている ([GitHub.Tokens] は注目を集めた一例にすぎない)。DPoP は、予期しないトークン漏洩の影響に対する一般的な多層防御を提供する。ただし、DPoP はセキュアなトランスポートの代替ではなく、常に HTTPS と併用しなければならない (MUST)。
The very nature of the typical OAuth protocol interaction necessitates that the client discloses the access token to the protected resources that it accesses. The attacker model in [SECURITY-TOPICS] describes cases where a protected resource might be counterfeit, malicious, or compromised and plays received tokens against other protected resources to gain unauthorized access. Audience-restricted access tokens (e.g., using the JWT [RFC7519] aud claim) can prevent such misuse. However, doing so in practice has proven to be prohibitively cumbersome for many deployments (despite extensions such as [RFC8707]). Sender-constraining access tokens is a more robust and straightforward mechanism to prevent such token replay at a different endpoint, and DPoP is an accessible application-layer means of doing so.
典型的な OAuth プロトコルのやり取りの性質上、クライアントはアクセスする保護リソースに対してアクセストークンを開示する必要がある。[SECURITY-TOPICS] の攻撃者モデルは、保護リソースが偽物、悪意のあるもの、または侵害されたものであり、受け取ったトークンを他の保護リソースに対して使用して不正なアクセスを得るケースを記述している。オーディエンス制限付きアクセストークン (例えば、JWT [RFC7519] の aud クレームを使用するもの) はそのような悪用を防ぐことができる。しかし、実際にそうすることは、多くのデプロイメントにとって ([RFC8707] のような拡張があるにもかかわらず) 極めて煩雑であることが分かっている。アクセストークンの送信者制約は、別のエンドポイントでのそのようなトークンリプレイを防ぐための、より堅牢で直截的なメカニズムであり、DPoP はそれを実現する利用しやすいアプリケーション層の手段である。
Due to the potential for cross-site scripting (XSS), browser-based OAuth clients bring to bear added considerations with respect to protecting tokens. The most straightforward XSS-based attack is for an attacker to exfiltrate a token and use it themselves completely independent of the legitimate client. A stolen access token is used for protected resource access, and a stolen refresh token is used for obtaining new access tokens. If the private key is non-extractable (as is possible with [W3C.WebCryptoAPI]), DPoP renders exfiltrated tokens alone unusable.
クロスサイトスクリプティング (XSS) の可能性があるため、ブラウザベースの OAuth クライアントにはトークン保護に関して追加の考慮事項がある。最も直接的な XSS ベースの攻撃は、攻撃者がトークンを持ち出し、正当なクライアントとはまったく独立に自ら使用するものである。盗まれたアクセストークンは保護リソースへのアクセスに使用され、盗まれたリフレッシュトークンは新しいアクセストークンの取得に使用される。秘密鍵が抽出不可能であれば ([W3C.WebCryptoAPI] で可能なように)、DPoP は持ち出されたトークン単体を使用不能にする。
XSS vulnerabilities also allow an attacker to execute code in the context of the browser-based client application and maliciously use a token indirectly through the client. That execution context has access to utilize the signing key; thus, it can produce DPoP proofs to use in conjunction with the token. At this application layer, there is most likely no feasible defense against this threat except generally preventing XSS; therefore, it is considered out of scope for DPoP.
XSS 脆弱性はまた、攻撃者がブラウザベースのクライアントアプリケーションのコンテキストでコードを実行し、クライアントを通じて間接的にトークンを悪用することを可能にする。その実行コンテキストは署名鍵を利用するアクセスを持つため、トークンと併用する DPoP プルーフを生成できる。このアプリケーション層では、XSS を全般的に防ぐこと以外にこの脅威に対する実現可能な防御はおそらく存在しないため、これは DPoP の範囲外とみなす。
Malicious XSS code executed in the context of the browser-based client application is also in a position to create DPoP proofs with timestamp values in the future and exfiltrate them in conjunction with a token. These stolen artifacts can later be used independent of the client application to access protected resources. To prevent this, servers can optionally require clients to include a server- chosen value into the proof that cannot be predicted by an attacker (nonce). In the absence of the optional nonce, the impact of pre- computed DPoP proofs is limited somewhat by the proof being bound to an access token on protected resource access. Because a proof covering an access token that does not yet exist cannot feasibly be created, access tokens obtained with an exfiltrated refresh token and pre-computed proofs will be unusable.
ブラウザベースのクライアントアプリケーションのコンテキストで実行される悪意のある XSS コードは、未来のタイムスタンプ値を持つ DPoP プルーフを作成し、トークンとともに持ち出すこともできる。これらの盗まれた成果物は、後にクライアントアプリケーションとは独立に保護リソースへのアクセスに使用できる。これを防ぐため、サーバーは任意で、攻撃者が予測できないサーバー選択の値 (nonce) をプルーフに含めることをクライアントに要求できる。任意の nonce がない場合でも、保護リソースアクセスにおいてプルーフがアクセストークンに結び付けられることにより、事前計算された DPoP プルーフの影響はある程度限定される。まだ存在しないアクセストークンを対象とするプルーフを現実的に作成することはできないため、持ち出されたリフレッシュトークンと事前計算されたプルーフで取得したアクセストークンは使用不能となる。
Additional security considerations are discussed in Section 11.
追加のセキュリティに関する考慮事項は 11 節で論じる。
3.Concept
3.コンセプト
The main data structure introduced by this specification is a DPoP proof JWT that is sent as a header in an HTTP request, as described in detail below. A client uses a DPoP proof JWT to prove the possession of a private key corresponding to a certain public key.
本仕様が導入する主要なデータ構造は、以下で詳述するとおり、HTTP リクエストのヘッダーとして送信される DPoP プルーフ JWT である。クライアントは DPoP プルーフ JWT を使用して、ある公開鍵に対応する秘密鍵の所有を証明する。
Roughly speaking, a DPoP proof is a signature over:
おおまかに言えば、DPoP プルーフは次のものに対する署名である:
* some data of the HTTP request to which it is attached,
* それが付加される HTTP リクエストの一部のデータ、
* a timestamp,
* タイムスタンプ、
* a unique identifier,
* 一意な識別子、
* an optional server-provided nonce, and
* 任意のサーバー提供の nonce、および
* a hash of the associated access token when an access token is present within the request.
* リクエスト内にアクセストークンが存在する場合、関連するアクセストークンのハッシュ。
+--------+ +---------------+ | |--(A)-- Token Request ------------------->| | | Client | (DPoP Proof) | Authorization | | | | Server | | |<-(B)-- DPoP-Bound Access Token ----------| | | | (token_type=DPoP) +---------------+ | | | | | | +---------------+ | |--(C)-- DPoP-Bound Access Token --------->| | | | (DPoP Proof) | Resource | | | | Server | | |<-(D)-- Protected Resource ---------------| | | | +---------------+ +--------+
Figure 1: Basic DPoP Flow
The basic steps of an OAuth flow with DPoP (without the optional nonce) are shown in Figure 1.
DPoP を用いた OAuth フローの基本的なステップ (任意の nonce を用いない場合) を図 1 に示す。
A. In the token request, the client sends an authorization grant (e.g., an authorization code, refresh token, etc.) to the authorization server in order to obtain an access token (and potentially a refresh token). The client attaches a DPoP proof to the request in an HTTP header.
A. トークンリクエストにおいて、クライアントはアクセストークン (および場合によってはリフレッシュトークン) を取得するために、認可グラント (例えば、認可コード、リフレッシュトークンなど) を認可サーバーに送信する。クライアントは HTTP ヘッダーで DPoP プルーフをリクエストに付加する。
B. The authorization server binds (sender-constrains) the access token to the public key claimed by the client in the DPoP proof; that is, the access token cannot be used without proving possession of the respective private key. If a refresh token is issued to a public client, it is also bound to the public key of the DPoP proof.
B. 認可サーバーは、DPoP プルーフでクライアントが主張した公開鍵にアクセストークンを結び付ける (送信者制約する)。すなわち、アクセストークンは対応する秘密鍵の所有を証明しなければ使用できない。パブリッククライアントにリフレッシュトークンが発行される場合、それも DPoP プルーフの公開鍵に結び付けられる。
C. To use the access token, the client has to prove possession of the private key by, again, adding a header to the request that carries a DPoP proof for that request. The resource server needs to receive information about the public key to which the access token is bound. This information may be encoded directly into the access token (for JWT-structured access tokens) or provided via token introspection endpoint (not shown). The resource server verifies that the public key to which the access token is bound matches the public key of the DPoP proof. It also verifies that the access token hash in the DPoP proof matches the access token presented in the request.
C. アクセストークンを使用するために、クライアントは、そのリクエストに対する DPoP プルーフを運ぶヘッダーを再びリクエストに追加することで、秘密鍵の所有を証明しなければならない。リソースサーバーは、アクセストークンが結び付けられている公開鍵に関する情報を受け取る必要がある。この情報は、アクセストークンに直接エンコードされる (JWT 構造のアクセストークンの場合) か、トークンイントロスペクションエンドポイント経由で提供される (図には示さない)。リソースサーバーは、アクセストークンが結び付けられている公開鍵が DPoP プルーフの公開鍵と一致することを検証する。また、DPoP プルーフ内のアクセストークンハッシュが、リクエストで提示されたアクセストークンと一致することも検証する。
D. The resource server refuses to serve the request if the signature check fails or if the data in the DPoP proof is wrong, e.g., the target URI does not match the URI claim in the DPoP proof JWT. The access token itself, of course, must also be valid in all other respects.
D. 署名検証に失敗した場合、または DPoP プルーフ内のデータが誤っている場合 (例えば、ターゲット URI が DPoP プルーフ JWT 内の URI クレームと一致しない場合)、リソースサーバーはリクエストの処理を拒否する。もちろん、アクセストークン自体も他のあらゆる点で有効でなければならない。
The DPoP mechanism presented herein is not a client authentication method. In fact, a primary use case of DPoP is for public clients (e.g., single-page applications and applications on a user's device) that do not use client authentication. Nonetheless, DPoP is designed to be compatible with private_key_jwt and all other client authentication methods.
ここで提示する DPoP メカニズムはクライアント認証方式ではない。実際、DPoP の主要なユースケースは、クライアント認証を使用しないパブリッククライアント (例えば、シングルページアプリケーションやユーザーのデバイス上のアプリケーション) である。それでも、DPoP は private_key_jwt およびその他すべてのクライアント認証方式と互換性があるように設計されている。
DPoP does not directly ensure message integrity, but it relies on the TLS layer for that purpose. See Section 11 for details.
DPoP はメッセージの完全性を直接保証するものではなく、その目的には TLS 層に依存する。詳細は 11 節を参照。
4.DPoP Proof JWTs
4.DPoP プルーフ JWT
DPoP introduces the concept of a DPoP proof, which is a JWT created by the client and sent with an HTTP request using the DPoP header field. Each HTTP request requires a unique DPoP proof.
DPoP は DPoP プルーフの概念を導入する。DPoP プルーフは、クライアントが作成し、DPoP ヘッダーフィールドを用いて HTTP リクエストとともに送信する JWT である。各 HTTP リクエストには一意な DPoP プルーフが必要である。
A valid DPoP proof demonstrates to the server that the client holds the private key that was used to sign the DPoP proof JWT. This enables authorization servers to bind issued tokens to the corresponding public key (as described in Section 5) and enables resource servers to verify the key-binding of tokens that it receives (see Section 7.1), which prevents said tokens from being used by any entity that does not have access to the private key.
有効な DPoP プルーフは、クライアントが DPoP プルーフ JWT の署名に使用した秘密鍵を保持していることをサーバーに示す。これにより、認可サーバーは発行するトークンを対応する公開鍵に結び付けることができ (5 節で記述)、リソースサーバーは受け取ったトークンの鍵への結び付きを検証できる (7.1 節参照)。これによって、当該トークンが秘密鍵にアクセスできない主体によって使用されることが防がれる。
The DPoP proof demonstrates possession of a key and, by itself, is not an authentication or access control mechanism. When presented in conjunction with a key-bound access token as described in Section 7.1, the DPoP proof provides additional assurance about the legitimacy of the client to present the access token. However, a valid DPoP proof JWT is not sufficient alone to make access control decisions.
DPoP プルーフは鍵の所有を証明するものであり、それ自体は認証やアクセス制御のメカニズムではない。7.1 節に記述するとおり鍵に結び付けられたアクセストークンとともに提示された場合、DPoP プルーフは、クライアントがそのアクセストークンを提示する正当性について追加の保証を提供する。しかし、有効な DPoP プルーフ JWT だけではアクセス制御の判断を下すのに十分ではない。
4.1.The DPoP HTTP Header
4.1.DPoP HTTP ヘッダー
A DPoP proof is included in an HTTP request using the following request header field.
DPoP プルーフは、次のリクエストヘッダーフィールドを用いて HTTP リクエストに含められる。
DPoP: A JWT that adheres to the structure and syntax of Section 4.2.
Figure 2 shows an example DPoP HTTP header field. The example uses "\" line wrapping per [RFC8792].
図 2 に DPoP HTTP ヘッダーフィールドの例を示す。この例は [RFC8792] に従う「\」による行折り返しを使用している。
DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik\
VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR\
nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE\
QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj\
oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia\
WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg\
4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3LgFigure 2: Example DPoP Header
Note that per [RFC9110], header field names are case insensitive; thus, DPoP, DPOP, dpop, etc., are all valid and equivalent header field names. However, case is significant in the header field value.
[RFC9110] により、ヘッダーフィールド名は大文字小文字を区別しないことに注意。したがって、DPoP、DPOP、dpop などはすべて有効で等価なヘッダーフィールド名である。ただし、ヘッダーフィールドの値においては大文字小文字は意味を持つ。
The DPoP HTTP header field value uses the token68 syntax defined in Section 11.2 of [RFC9110] and is repeated below in Figure 3 for ease of reference.
DPoP HTTP ヘッダーフィールドの値は [RFC9110] の 11.2 節で定義される token68 構文を使用する。参照の便宜のため、図 3 に再掲する。
DPoP = token68
token68 = 1*( ALPHA / DIGIT /
"-" / "." / "_" / "~" / "+" / "/" ) *"="Figure 3: DPoP Header Field ABNF
4.2.DPoP Proof JWT Syntax
4.2.DPoP プルーフ JWT の構文
A DPoP proof is a JWT [RFC7519] that is signed (using JSON Web Signature (JWS) [RFC7515]) with a private key chosen by the client (see below). The JOSE Header of a DPoP JWT MUST contain at least the following parameters:
DPoP プルーフは、クライアントが選んだ秘密鍵で (JSON Web Signature (JWS) [RFC7515] を用いて) 署名された JWT [RFC7519] である (後述)。DPoP JWT の JOSE ヘッダーは少なくとも次のパラメータを含まなければならない (MUST):
typ: A field with the value dpop+jwt, which explicitly types the DPoP proof JWT as recommended in Section 3.11 of [RFC8725].
typ: 値 dpop+jwt を持つフィールド。[RFC8725] の 3.11 節で推奨されるとおり、DPoP プルーフ JWT を明示的に型付けする。
alg: An identifier for a JWS asymmetric digital signature algorithm from [IANA.JOSE.ALGS]. It MUST NOT be none or an identifier for a symmetric algorithm (Message Authentication Code (MAC)).
alg: [IANA.JOSE.ALGS] の JWS 非対称デジタル署名アルゴリズムの識別子。none や対称アルゴリズム (メッセージ認証コード (MAC)) の識別子であってはならない (MUST NOT)。
jwk: Represents the public key chosen by the client in JSON Web Key (JWK) [RFC7517] format as defined in Section 4.1.3 of [RFC7515]. It MUST NOT contain a private key.
jwk: [RFC7515] の 4.1.3 節で定義されるとおり、クライアントが選んだ公開鍵を JSON Web Key (JWK) [RFC7517] 形式で表す。秘密鍵を含んではならない (MUST NOT)。
The payload of a DPoP proof MUST contain at least the following claims:
DPoP プルーフのペイロードは少なくとも次のクレームを含まなければならない (MUST):
jti: Unique identifier for the DPoP proof JWT. The value MUST be assigned such that there is a negligible probability that the same value will be assigned to any other DPoP proof used in the same context during the time window of validity. Such uniqueness can be accomplished by encoding (base64url or any other suitable encoding) at least 96 bits of pseudorandom data or by using a version 4 Universally Unique Identifier (UUID) string according to [RFC4122]. The jti can be used by the server for replay detection and prevention; see Section 11.1.
jti: DPoP プルーフ JWT の一意な識別子。この値は、有効期間の時間枠内に同じコンテキストで使用される他のいかなる DPoP プルーフにも同じ値が割り当てられる確率が無視できるように割り当てなければならない (MUST)。そのような一意性は、少なくとも 96 ビットの擬似乱数データをエンコードする (base64url またはその他の適切なエンコーディング) か、[RFC4122] に従うバージョン 4 の Universally Unique Identifier (UUID) 文字列を使用することで達成できる。jti はサーバーがリプレイの検出と防止に使用できる。11.1 節を参照。
htm: The value of the HTTP method (Section 9.1 of [RFC9110]) of the request to which the JWT is attached.
htm: JWT が付加されるリクエストの HTTP メソッド ([RFC9110] の 9.1 節) の値。
htu: The HTTP target URI (Section 7.1 of [RFC9110]) of the request to which the JWT is attached, without query and fragment parts.
htu: JWT が付加されるリクエストの HTTP ターゲット URI ([RFC9110] の 7.1 節)。クエリおよびフラグメント部分は含まない。
iat: Creation timestamp of the JWT (Section 4.1.6 of [RFC7519]).
iat: JWT の作成タイムスタンプ ([RFC7519] の 4.1.6 節)。
When the DPoP proof is used in conjunction with the presentation of an access token in protected resource access (see Section 7), the DPoP proof MUST also contain the following claim:
DPoP プルーフが保護リソースアクセスにおけるアクセストークンの提示とともに使用される場合 (7 節参照)、DPoP プルーフは次のクレームも含まなければならない (MUST):
ath: Hash of the access token. The value MUST be the result of a base64url encoding (as defined in Section 2 of [RFC7515]) the SHA-256 [SHS] hash of the ASCII encoding of the associated access token's value.
ath: アクセストークンのハッシュ。値は、関連するアクセストークンの値の ASCII エンコーディングの SHA-256 [SHS] ハッシュを base64url エンコード ([RFC7515] の 2 節で定義) した結果でなければならない (MUST)。
When the authentication server or resource server provides a DPoP- Nonce HTTP header in a response (see Sections 8 and 9), the DPoP proof MUST also contain the following claim:
認証サーバーまたはリソースサーバーがレスポンスで DPoP-Nonce HTTP ヘッダーを提供した場合 (8 節および 9 節参照)、DPoP プルーフは次のクレームも含まなければならない (MUST):
nonce: A recent nonce provided via the DPoP-Nonce HTTP header.
nonce: DPoP-Nonce HTTP ヘッダーを通じて提供された最近の nonce。
A DPoP proof MAY contain other JOSE Header Parameters or claims as defined by extension, profile, or deployment-specific requirements.
DPoP プルーフは、拡張、プロファイル、またはデプロイメント固有の要件によって定義される他の JOSE ヘッダーパラメータやクレームを含んでもよい (MAY)。
Figure 4 is a conceptual example showing the decoded content of the DPoP proof in Figure 2. The JSON of the JWT header and payload are shown, but the signature part is omitted. As usual, line breaks and extra spaces are included for formatting and readability.
図 4 は、図 2 の DPoP プルーフのデコードされた内容を示す概念的な例である。JWT ヘッダーとペイロードの JSON を示すが、署名部分は省略している。通例どおり、整形と可読性のために改行と余分な空白を含めている。
{
"typ":"dpop+jwt",
"alg":"ES256",
"jwk": {
"kty":"EC",
"x":"l8tFrhx-34tV3hRICRDY9zCkDlpBhF42UQUfWVAWBFs",
"y":"9VE4jf_Ok_o64zbTTlcuNJajHmt6v9TDVrU0CdvGRDA",
"crv":"P-256"
}
}
.
{
"jti":"-BwC3ESc6acc2lTc",
"htm":"POST",
"htu":"https://server.example.com/token",
"iat":1562262616
}Figure 4: Example JWT Content of a DPoP Proof
Of the HTTP request, only the HTTP method and URI are included in the DPoP JWT; therefore, only these two message parts are covered by the DPoP proof. The idea is to sign just enough of the HTTP data to provide reasonable proof of possession with respect to the HTTP request. This design approach of using only a minimal subset of the HTTP header data is to avoid the substantial difficulties inherent in attempting to normalize HTTP messages. Nonetheless, DPoP proofs can be extended to contain other information of the HTTP request (see also Section 11.7).
HTTP リクエストのうち、DPoP JWT に含まれるのは HTTP メソッドと URI だけである。したがって、DPoP プルーフが対象とするのはこの 2 つのメッセージ部分のみである。その狙いは、HTTP リクエストに関して合理的な所有証明を提供するのに十分なだけの HTTP データに署名することにある。HTTP ヘッダーデータの最小限の部分集合のみを使用するというこの設計方針は、HTTP メッセージの正規化を試みることに内在する大きな困難を避けるためのものである。それでもなお、DPoP プルーフは HTTP リクエストの他の情報を含むように拡張できる (11.7 節も参照)。
4.3.Checking DPoP Proofs
4.3.DPoP プルーフの検査
To validate a DPoP proof, the receiving server MUST ensure the following:
DPoP プルーフを検証するため、受信側サーバーは次のことを確認しなければならない (MUST):
1. There is not more than one DPoP HTTP request header field.
DPoP HTTP リクエストヘッダーフィールドが 2 つ以上存在しないこと。
2. The DPoP HTTP request header field value is a single and well- formed JWT.
DPoP HTTP リクエストヘッダーフィールドの値が、単一の整形式の JWT であること。
3. All required claims per Section 4.2 are contained in the JWT.
4.2 節で必須とされるすべてのクレームが JWT に含まれていること。
4. The typ JOSE Header Parameter has the value dpop+jwt.
typ JOSE ヘッダーパラメータの値が dpop+jwt であること。
5. The alg JOSE Header Parameter indicates a registered asymmetric digital signature algorithm [IANA.JOSE.ALGS], is not none, is supported by the application, and is acceptable per local policy.
alg JOSE ヘッダーパラメータが、登録された非対称デジタル署名アルゴリズム [IANA.JOSE.ALGS] を示しており、none ではなく、アプリケーションがサポートしており、かつローカルポリシー上許容されるものであること。
6. The JWT signature verifies with the public key contained in the jwk JOSE Header Parameter.
JWT の署名が、jwk JOSE ヘッダーパラメータに含まれる公開鍵で検証できること。
7. The jwk JOSE Header Parameter does not contain a private key.
jwk JOSE ヘッダーパラメータに秘密鍵が含まれていないこと。
8. The htm claim matches the HTTP method of the current request.
htm クレームが現在のリクエストの HTTP メソッドと一致すること。
9. The htu claim matches the HTTP URI value for the HTTP request in which the JWT was received, ignoring any query and fragment parts.
htu クレームが、クエリ部とフラグメント部を無視したうえで、その JWT を受信した HTTP リクエストの HTTP URI 値と一致すること。
10. If the server provided a nonce value to the client, the nonce claim matches the server-provided nonce value.
サーバーがクライアントにノンス値を提供していた場合、nonce クレームがサーバー提供のノンス値と一致すること。
11. The creation time of the JWT, as determined by either the iat claim or a server managed timestamp via the nonce claim, is within an acceptable window (see Section 11.1).
iat クレーム、または nonce クレームを介したサーバー管理のタイムスタンプのいずれかによって判定される JWT の作成時刻が、許容できる時間窓の範囲内であること (11.1 節を参照)。
12. If presented to a protected resource in conjunction with an access token, * ensure that the value of the ath claim equals the hash of that access token, and * confirm that the public key to which the access token is bound matches the public key from the DPoP proof.
アクセストークンとともに保護リソースへ提示された場合、ath クレームの値がそのアクセストークンのハッシュと等しいことを確認し、かつ、アクセストークンが結び付けられている公開鍵が DPoP プルーフの公開鍵と一致することを確認すること。
To reduce the likelihood of false negatives, servers SHOULD employ syntax-based normalization (Section 6.2.2 of [RFC3986]) and scheme- based normalization (Section 6.2.3 of [RFC3986]) before comparing the htu claim.
偽陰性の可能性を減らすため、サーバーは htu クレームを比較する前に、構文に基づく正規化 ([RFC3986] の 6.2.2 節) およびスキームに基づく正規化 ([RFC3986] の 6.2.3 節) を適用すべきである (SHOULD)。
These checks may be performed in any order.
これらの検査は任意の順序で実行してよい。
5.DPoP Access Token Request
5.DPoP アクセストークンリクエスト
To request an access token that is bound to a public key using DPoP, the client MUST provide a valid DPoP proof JWT in a DPoP header when making an access token request to the authorization server's token endpoint. This is applicable for all access token requests regardless of grant type (e.g., the common authorization_code and refresh_token grant types and extension grants such as the JWT authorization grant [RFC7523]). The HTTP request shown in Figure 5 illustrates such an access token request using an authorization code grant with a DPoP proof JWT in the DPoP header. Figure 5 uses "\" line wrapping per [RFC8792].
DPoP を用いて公開鍵に結び付けられたアクセストークンを要求するため、クライアントは認可サーバーのトークンエンドポイントにアクセストークンリクエストを行う際、DPoP ヘッダーに有効な DPoP プルーフ JWT を提供しなければならない (MUST)。これはグラントタイプにかかわらずすべてのアクセストークンリクエストに適用される (例えば、一般的な authorization_code および refresh_token グラントタイプや、JWT 認可グラント [RFC7523] のような拡張グラント)。図 5 に示す HTTP リクエストは、DPoP ヘッダーに DPoP プルーフ JWT を含む、認可コードグラントを用いたそのようなアクセストークンリクエストを示す。図 5 は [RFC8792] に従う「\」による行折り返しを使用している。
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik\
VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR\
nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE\
QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj\
oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia\
WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg\
4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3Lggrant_type=authorization_code\ &client_id=s6BhdRkqt\ &code=SplxlOBeZQQYbYS6WxSbIA &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb\ &code_verifier=bEaL42izcC-o-xBk0K2vuJ6U-y1p9r_wW2dFWIWgjz-
Figure 5: Token Request for a DPoP Sender-Constrained Token Using an
Authorization CodeThe DPoP HTTP header field MUST contain a valid DPoP proof JWT. If the DPoP proof is invalid, the authorization server issues an error response per Section 5.2 of [RFC6749] with invalid_dpop_proof as the value of the error parameter.
DPoP HTTP ヘッダーフィールドは有効な DPoP プルーフ JWT を含まなければならない (MUST)。DPoP プルーフが無効な場合、認可サーバーは [RFC6749] の 5.2 節に従い、error パラメータの値を invalid_dpop_proof としてエラーレスポンスを発行する。
To sender-constrain the access token after checking the validity of the DPoP proof, the authorization server associates the issued access token with the public key from the DPoP proof, which can be accomplished as described in Section 6. A token_type of DPoP MUST be included in the access token response to signal to the client that the access token was bound to its DPoP key and can be used as described in Section 7.1. The example response shown in Figure 6 illustrates such a response.
DPoP プルーフの有効性を検査した後にアクセストークンを送信者制約するため、認可サーバーは発行したアクセストークンを DPoP プルーフの公開鍵に関連付ける。これは 6 節に記述する方法で実現できる。アクセストークンがクライアントの DPoP 鍵に結び付けられており 7.1 節に記述するとおりに使用できることをクライアントに伝えるため、アクセストークンレスポンスには DPoP という token_type を含めなければならない (MUST)。図 6 に示すレスポンス例はそのようなレスポンスを示す。
HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store
{
"access_token": "Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU",
"token_type": "DPoP",
"expires_in": 2677,
"refresh_token": "Q..Zkm29lexi8VnWg2zPW1x-tgGad0Ibc3s3EwM_Ni4-g"
}Figure 6: Access Token Response
The example response in Figure 6 includes a refresh token that the client can use to obtain a new access token when the previous one expires. Refreshing an access token is a token request using the refresh_token grant type made to the authorization server's token endpoint. As with all access token requests, the client makes it a DPoP request by including a DPoP proof, as shown in Figure 7. Figure 7 uses "\" line wrapping per [RFC8792].
図 6 のレスポンス例には、以前のアクセストークンが期限切れになった際にクライアントが新しいアクセストークンを取得するために使用できるリフレッシュトークンが含まれている。アクセストークンのリフレッシュは、認可サーバーのトークンエンドポイントに対して refresh_token グラントタイプを用いて行うトークンリクエストである。すべてのアクセストークンリクエストと同様に、クライアントは図 7 に示すとおり DPoP プルーフを含めることでこれを DPoP リクエストにする。図 7 は [RFC8792] に従う「\」による行折り返しを使用している。
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik\
VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR\
nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE\
QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj\
oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia\
WF0IjoxNTYyMjY1Mjk2fQ.pAqut2IRDm_De6PR93SYmGBPXpwrAk90e8cP2hjiaG5Qs\
GSuKDYW7_X620BxqhvYC8ynrrvZLTk41mSRroapUAgrant_type=refresh_token\ &client_id=s6BhdRkqt\ &refresh_token=Q..Zkm29lexi8VnWg2zPW1x-tgGad0Ibc3s3EwM_Ni4-g
Figure 7: Token Request for a DPoP-Bound Token Using a Refresh Token
When an authorization server supporting DPoP issues a refresh token to a public client that presents a valid DPoP proof at the token endpoint, the refresh token MUST be bound to the respective public key. The binding MUST be validated when the refresh token is later presented to get new access tokens. As a result, such a client MUST present a DPoP proof for the same key that was used to obtain the refresh token each time that refresh token is used to obtain a new access token. The implementation details of the binding of the refresh token are at the discretion of the authorization server. Since the authorization server both produces and validates its refresh tokens, there is no interoperability consideration in the specific details of the binding.
DPoP をサポートする認可サーバーが、トークンエンドポイントで有効な DPoP プルーフを提示したパブリッククライアントにリフレッシュトークンを発行する場合、そのリフレッシュトークンは対応する公開鍵に結び付けなければならない (MUST)。この結び付きは、後にリフレッシュトークンが新しいアクセストークンを取得するために提示された際に検証しなければならない (MUST)。その結果、そのようなクライアントは、リフレッシュトークンを使用して新しいアクセストークンを取得するたびに、そのリフレッシュトークンの取得に使用したのと同じ鍵に対する DPoP プルーフを提示しなければならない (MUST)。リフレッシュトークンの結び付けの実装詳細は認可サーバーの裁量に委ねられる。認可サーバーはリフレッシュトークンを生成し検証する両方の役割を担うため、結び付けの具体的な詳細に相互運用性上の考慮事項はない。
An authorization server MAY elect to issue access tokens that are not DPoP bound, which is signaled to the client with a value of Bearer in the token_type parameter of the access token response per [RFC6750]. For a public client that is also issued a refresh token, this has the effect of DPoP-binding the refresh token alone, which can improve the security posture even when protected resources are not updated to support DPoP.
認可サーバーは、DPoP に結び付けられていないアクセストークンを発行することを選択してもよい (MAY)。その場合、[RFC6750] に従い、アクセストークンレスポンスの token_type パラメータの値を Bearer としてクライアントに伝える。リフレッシュトークンも発行されるパブリッククライアントにとって、これはリフレッシュトークンのみを DPoP に結び付ける効果を持ち、保護リソースが DPoP をサポートするように更新されていない場合でもセキュリティ態勢を改善できる。
If the access token response contains a different token_type value than DPoP, the access token protection provided by DPoP is not given. The client MUST discard the response in this case if this protection is deemed important for the security of the application; otherwise, the client may continue as in a regular OAuth interaction.
アクセストークンレスポンスに DPoP 以外の token_type 値が含まれている場合、DPoP によるアクセストークン保護は提供されない。この保護がアプリケーションのセキュリティにとって重要とみなされる場合、クライアントはそのレスポンスを破棄しなければならない (MUST)。そうでなければ、クライアントは通常の OAuth のやり取りと同様に続行してよい。
Refresh tokens issued to confidential clients (those having established authentication credentials with the authorization server) are not bound to the DPoP proof public key because they are already sender-constrained with a different existing mechanism. The OAuth 2.0 Authorization Framework [RFC6749] already requires that an authorization server bind refresh tokens to the client to which they were issued and that confidential clients authenticate to the authorization server when presenting a refresh token. As a result, such refresh tokens are sender-constrained by way of the client identifier and the associated authentication requirement. This existing sender-constraining mechanism is more flexible (e.g., it allows credential rotation for the client without invalidating refresh tokens) than binding directly to a particular public key.
コンフィデンシャルクライアント (認可サーバーとの間で認証クレデンシャルを確立しているクライアント) に発行されるリフレッシュトークンは、既存の別のメカニズムによってすでに送信者制約されているため、DPoP プルーフの公開鍵には結び付けられない。The OAuth 2.0 Authorization Framework [RFC6749] は、認可サーバーがリフレッシュトークンを発行先のクライアントに結び付けること、およびコンフィデンシャルクライアントがリフレッシュトークンを提示する際に認可サーバーに対して認証することをすでに要求している。その結果、そのようなリフレッシュトークンはクライアント識別子と関連する認証要件によって送信者制約されている。この既存の送信者制約メカニズムは、特定の公開鍵に直接結び付けるよりも柔軟である (例えば、リフレッシュトークンを無効化することなくクライアントのクレデンシャルをローテーションできる)。
5.1.Authorization Server Metadata
5.1.認可サーバーメタデータ
This document introduces the following authorization server metadata [RFC8414] parameter to signal support for DPoP in general and the specific JWS alg values the authorization server supports for DPoP proof JWTs.
本文書は、DPoP 全般のサポートと、認可サーバーが DPoP プルーフ JWT に対してサポートする具体的な JWS alg 値を伝えるため、次の認可サーバーメタデータ [RFC8414] パラメータを導入する。
dpop_signing_alg_values_supported: A JSON array containing a list of the JWS alg values (from the [IANA.JOSE.ALGS] registry) supported by the authorization server for DPoP proof JWTs.
dpop_signing_alg_values_supported: 認可サーバーが DPoP プルーフ JWT に対してサポートする JWS alg 値 ([IANA.JOSE.ALGS] レジストリに登録されたもの) のリストを含む JSON 配列。
5.2.Client Registration Metadata
5.2.クライアント登録メタデータ
The Dynamic Client Registration Protocol [RFC7591] defines an API for dynamically registering OAuth 2.0 client metadata with authorization servers. The metadata defined by [RFC7591], and registered extensions to it, also imply a general data model for clients that is useful for authorization server implementations even when the Dynamic Client Registration Protocol isn't in play. Such implementations will typically have some sort of user interface available for managing client configuration.
Dynamic Client Registration Protocol [RFC7591] は、OAuth 2.0 クライアントメタデータを認可サーバーに動的に登録するための API を定義している。[RFC7591] で定義されるメタデータとその登録済み拡張は、Dynamic Client Registration Protocol が使われていない場合でも認可サーバーの実装にとって有用な、クライアントの一般的なデータモデルも暗に示している。そのような実装は通常、クライアント設定を管理するための何らかのユーザーインターフェースを備えている。
This document introduces the following client registration metadata [RFC7591] parameter to indicate that the client always uses DPoP when requesting tokens from the authorization server.
本文書は、クライアントが認可サーバーにトークンを要求する際に常に DPoP を使用することを示すため、次のクライアント登録メタデータ [RFC7591] パラメータを導入する。
dpop_bound_access_tokens: A boolean value specifying whether the client always uses DPoP for token requests. If omitted, the default value is false.
dpop_bound_access_tokens: クライアントがトークンリクエストに常に DPoP を使用するかどうかを指定する真偽値。省略された場合、デフォルト値は false である。
If the value is true, the authorization server MUST reject token requests from the client that do not contain the DPoP header.
値が true の場合、認可サーバーはそのクライアントからの DPoP ヘッダーを含まないトークンリクエストを拒否しなければならない (MUST)。
6.Public Key Confirmation
6.公開鍵の確認
Resource servers MUST be able to reliably identify whether an access token is DPoP-bound and ascertain sufficient information to verify the binding to the public key of the DPoP proof (see Section 7.1). Such a binding is accomplished by associating the public key with the token in a way that can be accessed by the protected resource, such as embedding the JWK hash in the issued access token directly, using the syntax described in Section 6.1, or through token introspection as described in Section 6.2. Other methods of associating a public key with an access token are possible per an agreement by the authorization server and the protected resource; however, they are beyond the scope of this specification.
リソースサーバーは、アクセストークンが DPoP に結び付けられているかどうかを確実に識別し、DPoP プルーフの公開鍵への結び付きを検証するのに十分な情報を確認できなければならない (MUST) (7.1 節参照)。そのような結び付けは、6.1 節に記述する構文を用いて発行するアクセストークンに JWK ハッシュを直接埋め込む、または 6.2 節に記述するトークンイントロスペクションを通じるなど、保護リソースがアクセスできる方法で公開鍵をトークンに関連付けることで実現される。認可サーバーと保護リソースの間の合意により、公開鍵をアクセストークンに関連付ける他の方法も可能であるが、それらは本仕様の範囲外である。
Resource servers supporting DPoP MUST ensure that the public key from the DPoP proof matches the one bound to the access token.
DPoP をサポートするリソースサーバーは、DPoP プルーフの公開鍵がアクセストークンに結び付けられた公開鍵と一致することを確認しなければならない (MUST)。
6.1.JWK Thumbprint Confirmation Method
6.1.JWK Thumbprint 確認方式
When access tokens are represented as JWTs [RFC7519], the public key information is represented using the jkt confirmation method member defined herein. To convey the hash of a public key in a JWT, this specification introduces the following JWT Confirmation Method [RFC7800] member for use under the cnf claim.
アクセストークンが JWT [RFC7519] として表現される場合、公開鍵情報はここで定義する jkt 確認方式メンバーを用いて表現される。JWT 内で公開鍵のハッシュを伝えるため、本仕様は cnf クレームの下で使用する次の JWT Confirmation Method [RFC7800] メンバーを導入する。
jkt: JWK SHA-256 Thumbprint confirmation method. The value of the jkt member MUST be the base64url encoding (as defined in [RFC7515]) of the JWK SHA-256 Thumbprint (according to [RFC7638]) of the DPoP public key (in JWK format) to which the access token is bound.
jkt: JWK SHA-256 Thumbprint 確認方式。jkt メンバーの値は、アクセストークンが結び付けられている DPoP 公開鍵 (JWK 形式) の JWK SHA-256 Thumbprint ([RFC7638] による) を base64url エンコード ([RFC7515] で定義) したものでなければならない (MUST)。
The following example JWT in Figure 8 with a decoded JWT payload shown in Figure 9 contains a cnf claim with the jkt JWK Thumbprint confirmation method member. The jkt value in these examples is the hash of the public key from the DPoP proofs in the examples shown in Section 5. The example uses "\" line wrapping per [RFC8792].
図 8 の JWT の例 (デコードされた JWT ペイロードを図 9 に示す) は、jkt JWK Thumbprint 確認方式メンバーを持つ cnf クレームを含んでいる。これらの例の jkt 値は、5 節に示した例の DPoP プルーフの公開鍵のハッシュである。この例は [RFC8792] に従う「\」による行折り返しを使用している。
eyJhbGciOiJFUzI1NiIsImtpZCI6IkJlQUxrYiJ9.eyJzdWIiOiJzb21lb25lQGV4YW1\ wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBsZS5jb20iLCJuYmYiOjE\ 1NjIyNjI2MTEsImV4cCI6MTU2MjI2NjIxNiwiY25mIjp7ImprdCI6IjBaY09DT1JaTll\ 5LURXcHFxMzBqWnlKR0hUTjBkMkhnbEJWM3VpZ3VBNEkifX0.3Tyo8VTcn6u_PboUmAO\ YUY1kfAavomW_YwYMkmRNizLJoQzWy2fCo79Zi5yObpIzjWb5xW4OGld7ESZrh0fsrA
Figure 8: JWT Containing a JWK SHA-256 Thumbprint Confirmation
{
"sub":"someone@example.com",
"iss":"https://server.example.com",
"nbf":1562262611,
"exp":1562266216,
"cnf":
{
"jkt":"0ZcOCORZNYy-DWpqq30jZyJGHTN0d2HglBV3uiguA4I"
}
}Figure 9: JWT Claims Set with a JWK SHA-256 Thumbprint Confirmation
6.2.JWK Thumbprint Confirmation Method in Token Introspection
6.2.トークンイントロスペクションにおける JWK Thumbprint 確認方式
"OAuth 2.0 Token Introspection" [RFC7662] defines a method for a protected resource to query an authorization server about the active state of an access token. The protected resource also determines metainformation about the token.
「OAuth 2.0 Token Introspection」[RFC7662] は、保護リソースがアクセストークンの有効 (active) 状態について認可サーバーに問い合わせる方法を定義している。保護リソースはトークンに関するメタ情報も取得する。
For a DPoP-bound access token, the hash of the public key to which the token is bound is conveyed to the protected resource as metainformation in a token introspection response. The hash is conveyed using the same cnf content with jkt member structure as the JWK Thumbprint confirmation method, described in Section 6.1, as a top-level member of the introspection response JSON. Note that the resource server does not send a DPoP proof with the introspection request, and the authorization server does not validate an access token's DPoP binding at the introspection endpoint. Rather, the resource server uses the data of the introspection response to validate the access token binding itself locally.
DPoP に結び付けられたアクセストークンについては、トークンが結び付けられている公開鍵のハッシュが、トークンイントロスペクションレスポンスのメタ情報として保護リソースに伝えられる。このハッシュは、6.1 節に記述する JWK Thumbprint 確認方式と同じ、jkt メンバー構造を持つ cnf の内容を用いて、イントロスペクションレスポンス JSON のトップレベルメンバーとして伝えられる。リソースサーバーはイントロスペクションリクエストとともに DPoP プルーフを送信せず、認可サーバーはイントロスペクションエンドポイントでアクセストークンの DPoP 結び付きを検証しないことに注意。そうではなく、リソースサーバーはイントロスペクションレスポンスのデータを用いて、アクセストークンの結び付きを自らローカルで検証する。
If the token_type member is included in the introspection response, it MUST contain the value DPoP.
イントロスペクションレスポンスに token_type メンバーが含まれる場合、その値は DPoP でなければならない (MUST)。
The example introspection request in Figure 10 and corresponding response in Figure 11 illustrate an introspection exchange for the example DPoP-bound access token that was issued in Figure 6.
図 10 のイントロスペクションリクエストの例と、図 11 の対応するレスポンスは、図 6 で発行された DPoP に結び付けられたアクセストークンの例に対するイントロスペクションのやり取りを示す。
POST /as/introspect.oauth2 HTTP/1.1 Host: server.example.com Content-Type: application/x-www-form-urlencoded Authorization: Basic cnM6cnM6TWt1LTZnX2xDektJZHo0ZnNON2tZY3lhK1Rp
token=Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU
token=Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU
Figure 10: Example Introspection Request
HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store
{
"active": true,
"sub": "someone@example.com",
"iss": "https://server.example.com",
"nbf": 1562262611,
"exp": 1562266216,
"cnf":
{
"jkt": "0ZcOCORZNYy-DWpqq30jZyJGHTN0d2HglBV3uiguA4I"
}
} Figure 11: Example Introspection Response for a DPoP-Bound Access
Token7.Protected Resource Access
7.保護リソースへのアクセス
Requests to DPoP-protected resources MUST include both a DPoP proof as per Section 4 and the access token as described in Section 7.1. The DPoP proof MUST include the ath claim with a valid hash of the associated access token.
DPoP で保護されたリソースへのリクエストは、4 節に従う DPoP プルーフと、7.1 節に記述するアクセストークンの両方を含まなければならない (MUST)。DPoP プルーフは、関連するアクセストークンの有効なハッシュを持つ ath クレームを含まなければならない (MUST)。
Binding the token value to the proof in this way prevents a proof to be used with multiple different access token values across different requests. For example, if a client holds tokens bound to two different resource owners, AT1 and AT2, and uses the same key when talking to the authorization server, it's possible that these tokens could be swapped. Without the ath field to bind it, a captured signature applied to AT1 could be replayed with AT2 instead, changing the rights and access of the intended request. This same substitution prevention remains for rotated access tokens within the same combination of client and resource owner -- a rotated token value would require the calculation of a new proof. This binding additionally ensures that a proof intended for use with the access token is not usable without an access token, or vice-versa.
このようにトークン値をプルーフに結び付けることで、1 つのプルーフが異なるリクエストにまたがって複数の異なるアクセストークン値とともに使用されることが防がれる。例えば、クライアントが 2 つの異なるリソースオーナーに結び付けられたトークン AT1 と AT2 を保持し、認可サーバーとの通信に同じ鍵を使用している場合、これらのトークンが入れ替えられる可能性がある。結び付けるための ath フィールドがなければ、AT1 に適用された署名を捕捉し、代わりに AT2 とともにリプレイして、意図したリクエストの権利やアクセスを変更できてしまう。この同じ置き換え防止は、同じクライアントとリソースオーナーの組み合わせ内でローテーションされたアクセストークンにも及ぶ。ローテーションされたトークン値には新しいプルーフの計算が必要になる。この結び付けはさらに、アクセストークンとともに使用することを意図したプルーフがアクセストークンなしでは使用できないこと、またその逆も保証する。
The resource server is required to calculate the hash of the token value presented and verify that it is the same as the hash value in the ath field as described in Section 4.3. Since the ath field value is covered by the DPoP proof's signature, its inclusion binds the access token value to the holder of the key used to generate the signature.
リソースサーバーは、提示されたトークン値のハッシュを計算し、4.3 節に記述するとおり、それが ath フィールドのハッシュ値と同一であることを検証することを求められる。ath フィールドの値は DPoP プルーフの署名の対象に含まれるため、これを含めることでアクセストークン値が署名生成に使用された鍵の保持者に結び付けられる。
Note that the ath field alone does not prevent replay of the DPoP proof or provide binding to the request in which the proof is presented, and it is still important to check the time window of the proof as well as the included message parameters, such as htm and htu.
ath フィールドだけでは DPoP プルーフのリプレイを防いだり、プルーフが提示されたリクエストへの結び付きを提供したりはしないことに注意。プルーフの時間枠、および htm や htu といった含まれているメッセージパラメータを検査することは依然として重要である。
7.1.The DPoP Authentication Scheme
7.1.DPoP 認証スキーム
A DPoP-bound access token is sent using the Authorization request header field per Section 11.6.2 of [RFC9110] with an authentication scheme of DPoP. The syntax of the Authorization header field for the DPoP scheme uses the token68 syntax defined in Section 11.2 of [RFC9110] for credentials and is repeated below for ease of reference. The ABNF notation syntax for DPoP authentication scheme credentials is as follows:
DPoP に結び付けられたアクセストークンは、[RFC9110] の 11.6.2 節に従い、認証スキームを DPoP として Authorization リクエストヘッダーフィールドを用いて送信される。DPoP スキームの Authorization ヘッダーフィールドの構文は、クレデンシャルに [RFC9110] の 11.2 節で定義される token68 構文を使用する。参照の便宜のため以下に再掲する。DPoP 認証スキームのクレデンシャルの ABNF 記法構文は次のとおりである:
token68 = 1*( ALPHA / DIGIT /
"-" / "." / "_" / "~" / "+" / "/" ) *"="credentials = "DPoP" 1*SP token68
credentials = "DPoP" 1*SP token68
Figure 12: DPoP Authentication Scheme ABNF
For such an access token, a resource server MUST check that a DPoP proof was also received in the DPoP header field of the HTTP request, check the DPoP proof according to the rules in Section 4.3, and check that the public key of the DPoP proof matches the public key to which the access token is bound per Section 6.
そのようなアクセストークンについて、リソースサーバーは、HTTP リクエストの DPoP ヘッダーフィールドで DPoP プルーフも受信したことを確認し、4.3 節の規則に従って DPoP プルーフを検査し、DPoP プルーフの公開鍵が 6 節に従ってアクセストークンに結び付けられた公開鍵と一致することを確認しなければならない (MUST)。
The resource server MUST NOT grant access to the resource unless all checks are successful.
リソースサーバーは、すべての検査が成功しない限り、リソースへのアクセスを許可してはならない (MUST NOT)。
Figure 13 shows an example request to a protected resource with a DPoP-bound access token in the Authorization header and the DPoP proof in the DPoP header. The example uses "\" line wrapping per [RFC8792]. Figure 14 shows the decoded content of that DPoP proof. The JSON of the JWT header and payload are shown, but the signature part is omitted. As usual, line breaks and indentation are included for formatting and readability.
図 13 は、Authorization ヘッダーに DPoP に結び付けられたアクセストークンを、DPoP ヘッダーに DPoP プルーフを含む保護リソースへのリクエストの例を示す。この例は [RFC8792] に従う「\」による行折り返しを使用している。図 14 はその DPoP プルーフのデコードされた内容を示す。JWT ヘッダーとペイロードの JSON を示すが、署名部分は省略している。通例どおり、整形と可読性のために改行とインデントを含めている。
GET /protectedresource HTTP/1.1
Host: resource.example.org
Authorization: DPoP Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU
DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik\
VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR\
nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE\
QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiJlMWozVl9iS2ljOC1MQUVCIiwiaHRtIj\
oiR0VUIiwiaHR1IjoiaHR0cHM6Ly9yZXNvdXJjZS5leGFtcGxlLm9yZy9wcm90ZWN0Z\
WRyZXNvdXJjZSIsImlhdCI6MTU2MjI2MjYxOCwiYXRoIjoiZlVIeU8ycjJaM0RaNTNF\
c05yV0JiMHhXWG9hTnk1OUlpS0NBcWtzbVFFbyJ9.2oW9RP35yRqzhrtNP86L-Ey71E\
OptxRimPPToA1plemAgR6pxHF8y6-yqyVnmcw6Fy1dqd-jfxSYoMxhAJpLjAFigure 13: DPoP-Protected Resource Request
{
"typ":"dpop+jwt",
"alg":"ES256",
"jwk": {
"kty":"EC",
"x":"l8tFrhx-34tV3hRICRDY9zCkDlpBhF42UQUfWVAWBFs",
"y":"9VE4jf_Ok_o64zbTTlcuNJajHmt6v9TDVrU0CdvGRDA",
"crv":"P-256"
}
}
.
{
"jti":"e1j3V_bKic8-LAEB",
"htm":"GET",
"htu":"https://resource.example.org/protectedresource",
"iat":1562262618,
"ath":"fUHyO2r2Z3DZ53EsNrWBb0xWXoaNy59IiKCAqksmQEo"
}Figure 14: Decoded Content of the DPoP Proof JWT in Figure 13
Upon receipt of a request to a protected resource within the protection space requiring DPoP authentication, the server can respond with a challenge to the client to provide DPoP authentication information if the request does not include valid credentials or does not contain an access token sufficient for access. Such a challenge is made using the 401 (Unauthorized) response status code ([RFC9110], Section 15.5.2) and the WWW-Authenticate header field ([RFC9110], Section 11.6.1). The server MAY include the WWW-Authenticate header in response to other conditions as well.
DPoP 認証を要求する保護空間内の保護リソースへのリクエストを受信した際、リクエストが有効なクレデンシャルを含まない場合、またはアクセスに十分なアクセストークンを含まない場合、サーバーは DPoP 認証情報を提供するようクライアントにチャレンジで応答できる。このようなチャレンジは、401 (Unauthorized) レスポンスステータスコード ([RFC9110] の 15.5.2 節) と WWW-Authenticate ヘッダーフィールド ([RFC9110] の 11.6.1 節) を用いて行う。サーバーは他の状況への応答としても WWW-Authenticate ヘッダーを含めてもよい (MAY)。
In such challenges:
そのようなチャレンジにおいて:
* The scheme name is DPoP.
スキーム名は DPoP である。
* The authentication parameter realm MAY be included to indicate the scope of protection in the manner described in [RFC9110], Section 11.5.
認証パラメータ realm を、[RFC9110] の 11.5 節に記述される方法で保護範囲を示すために含めてもよい (MAY)。
* A scope authentication parameter MAY be included as defined in [RFC6750], Section 3.
[RFC6750] の 3 節で定義される scope 認証パラメータを含めてもよい (MAY)。
* An error parameter ([RFC6750], Section 3) SHOULD be included to indicate the reason why the request was declined, if the request included an access token but failed authentication. The error parameter values described in [RFC6750], Section 3.1 are suitable, as are any appropriate values defined by extension. The value use_dpop_nonce can be used as described in Section 9 to signal that a nonce is needed in the DPoP proof of a subsequent request(s). Additionally, invalid_dpop_proof is used to indicate that the DPoP proof itself was deemed invalid based on the criteria of Section 4.3.
リクエストにアクセストークンが含まれていたが認証に失敗した場合、リクエストが拒否された理由を示すために error パラメータ ([RFC6750] の 3 節) を含めるべきである (SHOULD)。[RFC6750] の 3.1 節に記述される error パラメータ値が適しており、拡張によって定義される適切な値も同様である。値 use_dpop_nonce は、後続のリクエストの DPoP プルーフにノンスが必要であることを伝えるために 9 節に記述されるとおり使用できる。さらに、invalid_dpop_proof は、DPoP プルーフ自体が 4.3 節の基準に基づいて無効と判断されたことを示すために使用する。
* An error_description parameter ([RFC6750], Section 3) MAY be included along with the error parameter to provide developers a human-readable explanation that is not meant to be displayed to end-users.
error_description パラメータ ([RFC6750] の 3 節) を、エンドユーザーへの表示を意図しない、開発者向けの人間が読める説明を提供するために、error パラメータとともに含めてもよい (MAY)。
* An algs parameter SHOULD be included to signal to the client the JWS algorithms that are acceptable for the DPoP proof JWT. The value of the parameter is a space-delimited list of JWS alg (Algorithm) header values ([RFC7515], Section 4.1.1).
DPoP プルーフ JWT に対して許容される JWS アルゴリズムをクライアントに伝えるために、algs パラメータを含めるべきである (SHOULD)。このパラメータの値は、JWS の alg (Algorithm) ヘッダー値 ([RFC7515] の 4.1.1 節) をスペース区切りで並べたリストである。
* Additional authentication parameters MAY be used, and unknown parameters MUST be ignored by recipients.
追加の認証パラメータを使用してもよく (MAY)、未知のパラメータは受信者によって無視されなければならない (MUST)。
Figure 15 shows a response to a protected resource request without authentication.
図 15 は、認証なしの保護リソースリクエストに対するレスポンスを示す。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: DPoP algs="ES256 PS256" Figure 15: HTTP 401 Response to a Protected Resource Request without
AuthenticationFigure 16 shows a response to a protected resource request that was rejected due to the failed confirmation of the DPoP binding in the access token. Figure 16 uses "\" line wrapping per [RFC8792].
図 16 は、アクセストークン内の DPoP 結び付きの確認に失敗したために拒否された保護リソースリクエストに対するレスポンスを示す。図 16 は [RFC8792] に従う「\」による行折り返しを使用している。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: DPoP error="invalid_token", \
error_description="Invalid DPoP key binding", algs="ES256" Figure 16: HTTP 401 Response to a Protected Resource Request with
an Invalid TokenNote that browser-based client applications using Cross-Origin Resource Sharing (CORS) [WHATWG.Fetch] only have access to CORS- safelisted response HTTP headers by default. In order for the application to obtain and use the WWW-Authenticate HTTP response header value, the server needs to make it available to the application by including WWW-Authenticate in the Access-Control- Expose-Headers response header list value.
Cross-Origin Resource Sharing (CORS) [WHATWG.Fetch] を使用するブラウザベースのクライアントアプリケーションは、デフォルトでは CORS セーフリストに含まれるレスポンス HTTP ヘッダーにしかアクセスできないことに注意。アプリケーションが WWW-Authenticate HTTP レスポンスヘッダーの値を取得して使用できるようにするには、サーバーが Access-Control-Expose-Headers レスポンスヘッダーのリスト値に WWW-Authenticate を含めて、アプリケーションから利用可能にする必要がある。
This authentication scheme is for origin-server authentication only. Therefore, this authentication scheme MUST NOT be used with the Proxy-Authenticate or Proxy-Authorization header fields.
この認証スキームはオリジンサーバー認証専用である。したがって、この認証スキームを Proxy-Authenticate または Proxy-Authorization ヘッダーフィールドとともに使用してはならない (MUST NOT)。
Note that the syntax of the Authorization header field for this authentication scheme follows the usage of the Bearer scheme defined in Section 2.1 of [RFC6750]. While it is not the preferred credential syntax of [RFC9110], it is compatible with the general authentication framework therein and is used for consistency and familiarity with the Bearer scheme.
この認証スキームの Authorization ヘッダーフィールドの構文は、[RFC6750] の 2.1 節で定義される Bearer スキームの用法に従うことに注意。これは [RFC9110] で推奨されるクレデンシャル構文ではないが、同文書の一般的な認証フレームワークと互換性があり、Bearer スキームとの一貫性と親しみやすさのために使用している。
7.2.Compatibility with the Bearer Authentication Scheme
7.2.Bearer 認証スキームとの互換性
Protected resources simultaneously supporting both the DPoP and Bearer schemes need to update how the evaluation process is performed for bearer tokens to prevent downgraded usage of a DPoP-bound access token. Specifically, such a protected resource MUST reject a DPoP- bound access token received as a bearer token per [RFC6750].
DPoP と Bearer の両スキームを同時にサポートする保護リソースは、DPoP に結び付けられたアクセストークンのダウングレードされた使用を防ぐため、ベアラートークンの評価プロセスの実行方法を更新する必要がある。具体的には、そのような保護リソースは、[RFC6750] に従ってベアラートークンとして受信した DPoP に結び付けられたアクセストークンを拒否しなければならない (MUST)。
Section 11.6.1 of [RFC9110] allows a protected resource to indicate support for multiple authentication schemes (i.e., Bearer and DPoP) with the WWW-Authenticate header field of a 401 (Unauthorized) response.
[RFC9110] の 11.6.1 節は、保護リソースが 401 (Unauthorized) レスポンスの WWW-Authenticate ヘッダーフィールドで複数の認証スキーム (すなわち Bearer と DPoP) のサポートを示すことを認めている。
A protected resource that supports only [RFC6750] and is unaware of DPoP would most presumably accept a DPoP-bound access token as a bearer token (JWT [RFC7519] says to ignore unrecognized claims, Introspection [RFC7662] says that other parameters might be present while placing no functional requirements on their presence, and [RFC6750] is effectively silent on the content of the access token since it relates to validity). As such, a client can send a DPoP- bound access token using the Bearer scheme upon receipt of a WWW- Authenticate: Bearer challenge from a protected resource (or it can send a DPoP-bound access token if it has prior knowledge of the capabilities of the protected resource). The effect of this likely simplifies the logistics of phased upgrades to protected resources in their support DPoP or prolonged deployments of protected resources with mixed token type support.
[RFC6750] のみをサポートし DPoP を認識しない保護リソースは、DPoP に結び付けられたアクセストークンをベアラートークンとして受け入れる可能性が極めて高い (JWT [RFC7519] は認識できないクレームを無視するよう定めており、Introspection [RFC7662] は他のパラメータが存在しうるとしながらその存在に機能的要件を課しておらず、[RFC6750] はアクセストークンの内容について有効性に関わる事項として実質的に何も述べていない)。そのため、クライアントは、保護リソースから WWW-Authenticate: Bearer チャレンジを受け取った際に、Bearer スキームを用いて DPoP に結び付けられたアクセストークンを送信できる (あるいは、保護リソースの能力を事前に知っていれば DPoP に結び付けられたアクセストークンを送信できる)。この効果により、保護リソースの DPoP サポートへの段階的なアップグレードや、トークンタイプのサポートが混在する保護リソースの長期的なデプロイメントの運用が簡素化されるであろう。
If a protected resource supporting both Bearer and DPoP schemes elects to respond with multiple WWW-Authenticate challenges, attention should be paid to which challenge(s) should deliver the actual error information. It is RECOMMENDED that the following rules be adhered to:
Bearer と DPoP の両スキームをサポートする保護リソースが複数の WWW-Authenticate チャレンジで応答することを選択する場合、どのチャレンジが実際のエラー情報を伝えるべきかに注意を払うべきである。次の規則に従うことを推奨する (RECOMMENDED):
* If no authentication information has been included with the request, then the challenges SHOULD NOT include an error code or other error information, as per Section 3.1 of [RFC6750] (Figure 17).
* リクエストに認証情報が含まれていない場合、[RFC6750] の 3.1 節に従い、チャレンジはエラーコードやその他のエラー情報を含めるべきではない (SHOULD NOT) (図 17)。
* If the mechanism used to attempt authentication could be established unambiguously, then the corresponding challenge SHOULD be used to deliver error information (Figure 18).
* 認証の試行に使用されたメカニズムが曖昧さなく確定できる場合、対応するチャレンジを用いてエラー情報を伝えるべきである (SHOULD) (図 18)。
* Otherwise, both Bearer and DPoP challenges MAY be used to deliver error information (Figure 19).
* それ以外の場合、Bearer と DPoP の両方のチャレンジを用いてエラー情報を伝えてもよい (MAY) (図 19)。
The following examples use "\" line wrapping per [RFC8792].
以下の例は [RFC8792] に従う「\」による行折り返しを使用している。
GET /protectedresource HTTP/1.1 Host: resource.example.org
HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer, DPoP algs="ES256 PS256"
Figure 17: HTTP 401 Response to a Protected Resource Request without
AuthenticationGET /protectedresource HTTP/1.1 Host: resource.example.org Authorization: Bearer INVALID_TOKEN
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="invalid_token", \
error_description="Invalid token", DPoP algs="ES256 PS256" Figure 18: HTTP 401 Response to a Protected Resource Request with
Invalid AuthenticationGET /protectedresource HTTP/1.1 Host: resource.example.org Authorization: Bearer Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU Authorization: DPoP Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU
HTTP/1.1 400 Bad Request
WWW-Authenticate: Bearer error="invalid_request", \
error_description="Multiple methods used to include access token", \
DPoP algs="ES256 PS256", error="invalid_request", \
error_description="Multiple methods used to include access token" Figure 19: HTTP 400 Response to a Protected Resource Request with
Ambiguous Authentication7.3.Client Considerations
7.3.クライアントに関する考慮事項
Authorization including a DPoP proof may not be idempotent (depending on server enforcement of jti, iat, and nonce claims). Consequently, all previously idempotent requests for protected resources that were previously idempotent may no longer be idempotent. It is RECOMMENDED that clients generate a unique DPoP proof, even when retrying idempotent requests in response to HTTP errors generally understood as transient.
DPoP プルーフを含む認可は冪等でない可能性がある (サーバーによる jti、iat、nonce クレームの強制のしかたに依存する)。その結果、以前は冪等であった保護リソースへのすべてのリクエストが、もはや冪等でなくなる可能性がある。一般に一時的なものと理解される HTTP エラーに応じて冪等なリクエストを再試行する場合であっても、クライアントは一意な DPoP プルーフを生成することを推奨する (RECOMMENDED)。
Clients that encounter frequent network errors may experience additional challenges when interacting with servers with stricter nonce validation implementations.
頻繁にネットワークエラーに遭遇するクライアントは、より厳格な nonce 検証を実装するサーバーとやり取りする際に、追加の困難に直面する可能性がある。
8.Authorization Server-Provided Nonce
8.認可サーバーが提供するノンス
This section specifies a mechanism using opaque nonces provided by the server that can be used to limit the lifetime of DPoP proofs. Without employing such a mechanism, a malicious party controlling the client (potentially including the end-user) can create DPoP proofs for use arbitrarily far in the future.
この節では、DPoP プルーフの有効期間を制限するために利用できる、サーバーが提供する不透明なノンスを用いる仕組みを規定する。このような仕組みを用いない場合、クライアントを制御する悪意ある当事者 (エンドユーザーを含みうる) は、任意に遠い将来に使用するための DPoP プルーフを作成できてしまう。
Including a nonce value contributed by the authorization server in the DPoP proof MAY be used by authorization servers to limit the lifetime of DPoP proofs. The server determines when to issue a new DPoP nonce challenge and if it is needed, thereby requiring the use of the nonce value in subsequent DPoP proofs. The logic through which the server makes that determination is out of scope of this document.
認可サーバーが提供したノンス値を DPoP プルーフに含めることは、認可サーバーが DPoP プルーフの有効期間を制限するために用いてもよい (MAY)。サーバーは、新しい DPoP ノンスチャレンジをいつ発行するか、またそれが必要かどうかを判断し、それによって後続の DPoP プルーフでそのノンス値の使用を要求する。サーバーがその判断を行うロジックは本文書の範囲外である。
An authorization server MAY supply a nonce value to be included by the client in DPoP proofs sent. In this case, the authorization server responds to requests that do not include a nonce with an HTTP 400 (Bad Request) error response per Section 5.2 of [RFC6749] using use_dpop_nonce as the error code value. The authorization server includes a DPoP-Nonce HTTP header in the response supplying a nonce value to be used when sending the subsequent request. Nonce values MUST be unpredictable. This same error code is used when supplying a new nonce value when there was a nonce mismatch. The client will typically retry the request with the new nonce value supplied upon receiving a use_dpop_nonce error with an accompanying nonce value.
認可サーバーは、クライアントが送信する DPoP プルーフに含めるべきノンス値を提供してもよい (MAY)。この場合、認可サーバーはノンスを含まないリクエストに対して、[RFC6749] の 5.2 節に従い、エラーコード値として use_dpop_nonce を用いた HTTP 400 (Bad Request) エラーレスポンスで応答する。認可サーバーは、そのレスポンスに DPoP-Nonce HTTP ヘッダーを含め、後続のリクエストを送る際に使用するノンス値を提供する。ノンス値は予測不可能でなければならない (MUST)。ノンスが一致しなかった場合に新しいノンス値を提供するときにも、この同じエラーコードが用いられる。クライアントは通常、ノンス値を伴う use_dpop_nonce エラーを受け取ると、提供された新しいノンス値でリクエストを再試行する。
For example, in response to a token request without a nonce when the authorization server requires one, the authorization server can respond with a DPoP-Nonce value such as the following to provide a nonce value to include in the DPoP proof:
たとえば、認可サーバーがノンスを要求しているときにノンスのないトークンリクエストを受け取った場合、認可サーバーは DPoP プルーフに含めるべきノンス値を提供するために、次のような DPoP-Nonce 値で応答できる。
HTTP/1.1 400 Bad Request
DPoP-Nonce: eyJ7S_zG.eyJH0-Z.HX4w-7v {
"error": "use_dpop_nonce",
"error_description":
"Authorization server requires nonce in DPoP proof"
}Figure 20: HTTP 400 Response to a Token Request without a Nonce
Other HTTP headers and JSON fields MAY also be included in the error response, but there MUST NOT be more than one DPoP-Nonce header.
エラーレスポンスには他の HTTP ヘッダーや JSON フィールドを含めてもよい (MAY) が、DPoP-Nonce ヘッダーは 2 つ以上あってはならない (MUST NOT)。
Upon receiving the nonce, the client is expected to retry its token request using a DPoP proof including the supplied nonce value in the nonce claim of the DPoP proof. An example unencoded JWT payload of such a DPoP proof including a nonce is shown below.
ノンスを受け取ったクライアントは、提供されたノンス値を DPoP プルーフの nonce クレームに含めた DPoP プルーフを用いて、トークンリクエストを再試行することが期待される。ノンスを含むそのような DPoP プルーフの、エンコードされていない JWT ペイロードの例を以下に示す。
{
"jti": "-BwC3ESc6acc2lTc",
"htm": "POST",
"htu": "https://server.example.com/token",
"iat": 1562262616,
"nonce": "eyJ7S_zG.eyJH0-Z.HX4w-7v"
}Figure 21: DPoP Proof Payload including a Nonce Value
The nonce is opaque to the client.
ノンスはクライアントにとって不透明である。
If the nonce claim in the DPoP proof does not exactly match a nonce recently supplied by the authorization server to the client, the authorization server MUST reject the request. The rejection response MAY include a DPoP-Nonce HTTP header providing a new nonce value to use for subsequent requests.
DPoP プルーフ内の nonce クレームが、認可サーバーが最近クライアントに提供したノンスと厳密に一致しない場合、認可サーバーはそのリクエストを拒否しなければならない (MUST)。拒否レスポンスには、後続のリクエストで使用する新しいノンス値を提供する DPoP-Nonce HTTP ヘッダーを含めてもよい (MAY)。
The intent is that clients need to keep only one nonce value and servers need to keep a window of recent nonces. That said, transient circumstances may arise in which the stored nonce values for the server and the client differ. However, this situation is self- correcting. With any rejection message, the server can send the client the nonce value it wants to use to the client, and the client can store that nonce value and retry the request with it. Even if the client and/or server discard their stored nonce values, that situation is also self-correcting because new nonce values can be communicated when responding to or retrying failed requests.
意図としては、クライアントはノンス値を 1 つだけ保持すればよく、サーバーは直近のノンスのウィンドウを保持すればよい。とはいえ、サーバーとクライアントが保存しているノンス値が異なるという一時的な状況が生じることはありうる。しかし、この状況は自己修復的である。どの拒否メッセージでも、サーバーは使用してほしいノンス値をクライアントに送ることができ、クライアントはそのノンス値を保存し、それを用いてリクエストを再試行できる。クライアントやサーバーが保存しているノンス値を破棄した場合でも、失敗したリクエストへの応答や再試行の際に新しいノンス値を伝達できるため、その状況もまた自己修復的である。
Note that browser-based client applications using CORS [WHATWG.Fetch] only have access to CORS-safelisted response HTTP headers by default. In order for the application to obtain and use the DPoP-Nonce HTTP response header value, the server needs to make it available to the application by including DPoP-Nonce in the Access-Control-Expose- Headers response header list value.
CORS [WHATWG.Fetch] を使用するブラウザベースのクライアントアプリケーションは、既定では CORS セーフリストに含まれるレスポンス HTTP ヘッダーにしかアクセスできないことに注意すること。アプリケーションが DPoP-Nonce HTTP レスポンスヘッダーの値を取得して使用できるようにするには、サーバーは Access-Control-Expose-Headers レスポンスヘッダーのリスト値に DPoP-Nonce を含めて、アプリケーションから利用可能にする必要がある。
8.1.Nonce Syntax
8.1.ノンスの構文
The nonce syntax in ABNF as used by [RFC6749] (which is the same as the scope-token syntax) is shown below.
[RFC6749] で用いられる ABNF によるノンスの構文 (scope-token の構文と同じ) を以下に示す。
nonce = 1*NQCHAR
nonce = 1*NQCHAR
Figure 22: Nonce ABNF
8.2.Providing a New Nonce Value
8.2.新しいノンス値の提供
It is up to the authorization server when to supply a new nonce value for the client to use. The client is expected to use the existing supplied nonce in DPoP proofs until the server supplies a new nonce value.
クライアントが使用する新しいノンス値をいつ提供するかは認可サーバーに委ねられる。クライアントは、サーバーが新しいノンス値を提供するまで、既に提供されているノンスを DPoP プルーフで使い続けることが期待される。
The authorization server MAY supply the new nonce in the same way that the initial one was supplied: by using a DPoP-Nonce HTTP header in the response. The DPoP-Nonce HTTP header field uses the nonce syntax defined in Section 8.1. Each time this happens, it requires an extra protocol round trip.
認可サーバーは、最初のノンスを提供したのと同じ方法、すなわちレスポンスの DPoP-Nonce HTTP ヘッダーを用いて、新しいノンスを提供してもよい (MAY)。DPoP-Nonce HTTP ヘッダーフィールドは 8.1 節で定義したノンスの構文を用いる。これが行われるたびに、プロトコルの往復が 1 回余分に必要となる。
A more efficient manner of supplying a new nonce value is also defined by including a DPoP-Nonce HTTP header in the HTTP 200 (OK) response from the previous request. The client MUST use the new nonce value supplied for the next token request and for all subsequent token requests until the authorization server supplies a new nonce.
新しいノンス値をより効率的に提供する方法として、直前のリクエストに対する HTTP 200 (OK) レスポンスに DPoP-Nonce HTTP ヘッダーを含める方法も定義する。クライアントは、次のトークンリクエスト、および認可サーバーが新しいノンスを提供するまでのすべての後続のトークンリクエストで、提供された新しいノンス値を使用しなければならない (MUST)。
Responses that include the DPoP-Nonce HTTP header should be uncacheable (e.g., using Cache-Control: no-store in response to a GET request) to prevent the response from being used to serve a subsequent request and a stale nonce value from being used as a result.
DPoP-Nonce HTTP ヘッダーを含むレスポンスは、そのレスポンスが後続のリクエストへの応答に使われ、その結果として古いノンス値が使われることを防ぐため、キャッシュ不可にするべきである (たとえば GET リクエストへの応答では Cache-Control: no-store を用いる)。
An example 200 OK response providing a new nonce value is shown below.
新しいノンス値を提供する 200 OK レスポンスの例を以下に示す。
HTTP/1.1 200 OK
Cache-Control: no-store
DPoP-Nonce: eyJ7S_zG.eyJbYu3.xQmBj-1Figure 23: HTTP 200 Response Providing the Next Nonce Value
9.Resource Server-Provided Nonce
9.リソースサーバーが提供するノンス
Resource servers can also choose to provide a nonce value to be included in DPoP proofs sent to them. They provide the nonce using the DPoP-Nonce header in the same way that authorization servers do as described in Sections 8 and 8.2. The error signaling is performed as described in Section 7.1. Resource servers use an HTTP 401 (Unauthorized) error code with an accompanying WWW-Authenticate: DPoP value and DPoP-Nonce value to accomplish this.
リソースサーバーも、自身に送られる DPoP プルーフに含めるべきノンス値を提供することを選択できる。リソースサーバーは、8 節および 8.2 節で述べた認可サーバーと同じ方法で、DPoP-Nonce ヘッダーを用いてノンスを提供する。エラーの通知は 7.1 節で述べたとおりに行う。リソースサーバーはこれを実現するために、WWW-Authenticate: DPoP 値と DPoP-Nonce 値を伴う HTTP 401 (Unauthorized) エラーコードを用いる。
For example, in response to a resource request without a nonce when the resource server requires one, the resource server can respond with a DPoP-Nonce value such as the following to provide a nonce value to include in the DPoP proof. The example below uses "\" line wrapping per [RFC8792].
たとえば、リソースサーバーがノンスを要求しているときにノンスのないリソースリクエストを受け取った場合、リソースサーバーは DPoP プルーフに含めるべきノンス値を提供するために、次のような DPoP-Nonce 値で応答できる。以下の例は [RFC8792] に従って "\" による行折り返しを用いている。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: DPoP error="use_dpop_nonce", \
error_description="Resource server requires nonce in DPoP proof"
DPoP-Nonce: eyJ7S_zG.eyJH0-Z.HX4w-7vFigure 24: HTTP 401 Response to a Resource Request without a Nonce
Note that the nonces provided by an authorization server and a resource server are different and should not be confused with one another since nonces will be only accepted by the server that issued them. Likewise, should a client use multiple authorization servers and/or resource servers, a nonce issued by any of them should be used only at the issuing server. Developers should also be careful to not confuse DPoP nonces with the OpenID Connect [OpenID.Core] ID Token nonce.
認可サーバーが提供するノンスとリソースサーバーが提供するノンスは別物であり、ノンスはそれを発行したサーバーでのみ受け入れられるため、互いに混同すべきでないことに注意すること。同様に、クライアントが複数の認可サーバーやリソースサーバーを利用する場合、そのいずれかが発行したノンスは、発行したサーバーでのみ使用すべきである。開発者はまた、DPoP ノンスを OpenID Connect [OpenID.Core] の ID トークンの nonce と混同しないよう注意すべきである。
10.Authorization Code Binding to a DPoP Key
10.認可コードの DPoP 鍵への紐付け
Binding the authorization code issued to the client's proof-of- possession key can enable end-to-end binding of the entire authorization flow. This specification defines the dpop_jkt authorization request parameter for this purpose. The value of the dpop_jkt authorization request parameter is the JWK Thumbprint [RFC7638] of the proof-of-possession public key using the SHA-256 hash function, which is the same value as used for the jkt confirmation method defined in Section 6.1.
クライアントに発行される認可コードをクライアントの所有証明鍵に紐付けることで、認可フロー全体のエンドツーエンドの紐付けが可能になる。本仕様はこの目的のために dpop_jkt 認可リクエストパラメータを定義する。dpop_jkt 認可リクエストパラメータの値は、SHA-256 ハッシュ関数を用いた所有証明公開鍵の JWK Thumbprint [RFC7638] であり、これは 6.1 節で定義する jkt 確認方式に用いられる値と同じである。
When a token request is received, the authorization server computes the JWK Thumbprint of the proof-of-possession public key in the DPoP proof and verifies that it matches the dpop_jkt parameter value in the authorization request. If they do not match, it MUST reject the request.
トークンリクエストを受け取ると、認可サーバーは DPoP プルーフ内の所有証明公開鍵の JWK Thumbprint を計算し、それが認可リクエストの dpop_jkt パラメータ値と一致することを検証する。一致しない場合、認可サーバーはそのリクエストを拒否しなければならない (MUST)。
An example authorization request using the dpop_jkt authorization request parameter is shown below and uses "\" line wrapping per [RFC8792].
dpop_jkt 認可リクエストパラメータを用いた認可リクエストの例を以下に示す。この例は [RFC8792] に従って "\" による行折り返しを用いている。
GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz\
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb\
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM\
&code_challenge_method=S256\
&dpop_jkt=NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs HTTP/1.1
Host: server.example.comFigure 25: Authorization Request Using the dpop_jkt Parameter
Use of the dpop_jkt authorization request parameter is OPTIONAL. Note that the dpop_jkt authorization request parameter MAY also be used in combination with Proof Key for Code Exchange (PKCE) [RFC7636], which is recommended by [SECURITY-TOPICS] as a countermeasure to authorization code injection. The dpop_jkt authorization request parameter only provides similar protections when a unique DPoP key is used for each authorization request.
dpop_jkt 認可リクエストパラメータの使用は任意である (OPTIONAL)。dpop_jkt 認可リクエストパラメータは、[SECURITY-TOPICS] が認可コードインジェクションへの対策として推奨する Proof Key for Code Exchange (PKCE) [RFC7636] と組み合わせて使用してもよい (MAY) ことに注意すること。dpop_jkt 認可リクエストパラメータが同様の保護を提供するのは、認可リクエストごとに一意の DPoP 鍵が使用される場合に限られる。
10.1.DPoP with Pushed Authorization Requests
10.1.Pushed Authorization Request と DPoP
When Pushed Authorization Requests (PARs) [RFC9126] are used in conjunction with DPoP, there are two ways in which the DPoP key can be communicated in the PAR request:
Pushed Authorization Request (PAR) [RFC9126] を DPoP と併用する場合、PAR リクエストで DPoP 鍵を伝える方法は 2 つある。
* The dpop_jkt parameter can be used as described in Section 10 to bind the issued authorization code to a specific key. In this case, dpop_jkt MUST be included alongside other authorization request parameters in the POST body of the PAR request.
dpop_jkt パラメータは、発行される認可コードを特定の鍵に結び付けるために 10 節に記述されるとおり使用できる。この場合、dpop_jkt は PAR リクエストの POST ボディに、他の認可リクエストパラメータとともに含めなければならない (MUST)。
* Alternatively, the DPoP header can be added to the PAR request. In this case, the authorization server MUST check the provided DPoP proof JWT as defined in Section 4.3. It MUST further behave as if the contained public key's thumbprint was provided using dpop_jkt, i.e., reject the subsequent token request unless a DPoP proof for the same key is provided. This can help to simplify the implementation of the client, as it can "blindly" attach the DPoP header to all requests to the authorization server regardless of the type of request. Additionally, it provides a stronger binding, as the DPoP header contains a proof of possession of the private key.
あるいは、PAR リクエストに DPoP ヘッダーを付加することもできる。この場合、認可サーバーは提供された DPoP プルーフ JWT を 4.3 節で定義されるとおり検査しなければならない (MUST)。さらに、含まれている公開鍵のサムプリントが dpop_jkt を用いて提供されたかのように振る舞わなければならない (MUST)。すなわち、同じ鍵に対する DPoP プルーフが提供されない限り、後続のトークンリクエストを拒否する。これはクライアントの実装を簡素化するのに役立つ。クライアントは、リクエストの種類にかかわらず、認可サーバーへのすべてのリクエストに「何も考えずに」DPoP ヘッダーを付加できるからである。加えて、DPoP ヘッダーには秘密鍵の所有証明が含まれるため、より強い結び付けが得られる。
Both mechanisms MUST be supported by an authorization server that supports PAR and DPoP. If both mechanisms are used at the same time, the authorization server MUST reject the request if the JWK Thumbprint in dpop_jkt does not match the public key in the DPoP header.
PAR と DPoP をサポートする認可サーバーは、両方の仕組みをサポートしなければならない (MUST)。両方の仕組みが同時に使用された場合、dpop_jkt 内の JWK Thumbprint が DPoP ヘッダー内の公開鍵と一致しなければ、認可サーバーはそのリクエストを拒否しなければならない (MUST)。
Allowing both mechanisms ensures that clients using dpop_jkt do not need to distinguish between front-channel and pushed authorization requests, and at the same time, clients that only have one code path for protecting all calls to authorization server endpoints do not need to distinguish between requests to the PAR endpoint and the token endpoint.
両方の仕組みを許容することで、dpop_jkt を用いるクライアントはフロントチャネルの認可リクエストと pushed authorization request を区別する必要がなくなり、同時に、認可サーバーのエンドポイントへのすべての呼び出しを保護するコードパスを 1 つしか持たないクライアントは、PAR エンドポイントへのリクエストとトークンエンドポイントへのリクエストを区別する必要がなくなる。
11.Security Considerations
11.セキュリティに関する考慮事項
In DPoP, the prevention of token replay at a different endpoint (see Section 2) is achieved through authentication of the server per [RFC6125] and the binding of the DPoP proof to a certain URI and HTTP method. However, DPoP has a somewhat different nature of protection than TLS-based methods such as OAuth Mutual TLS [RFC8705] or OAuth Token Binding [TOKEN-BINDING] (see also Sections 11.1 and 11.7). TLS-based mechanisms can leverage a tight integration between the TLS layer and the application layer to achieve strong message integrity, authenticity, and replay protection.
DPoP では、異なるエンドポイントでのトークンリプレイの防止 (2 節参照) は、[RFC6125] に従ったサーバーの認証と、DPoP プルーフを特定の URI および HTTP メソッドに紐付けることによって達成される。しかし、DPoP の保護の性質は、OAuth Mutual TLS [RFC8705] や OAuth Token Binding [TOKEN-BINDING] のような TLS ベースの方式とはいくぶん異なる (11.1 節および 11.7 節も参照)。TLS ベースの仕組みは、TLS 層とアプリケーション層の緊密な統合を活用して、強力なメッセージの完全性、真正性、およびリプレイ保護を達成できる。
11.1.DPoP Proof Replay
11.1.DPoP プルーフのリプレイ
If an adversary is able to get hold of a DPoP proof JWT, the adversary could replay that token at the same endpoint (the HTTP endpoint and method are enforced via the respective claims in the JWTs). To limit this, servers MUST only accept DPoP proofs for a limited time after their creation (preferably only for a relatively brief period on the order of seconds or minutes).
攻撃者が DPoP プルーフ JWT を入手できた場合、攻撃者はそのトークンを同じエンドポイントでリプレイできる (HTTP エンドポイントとメソッドは JWT 内の対応するクレームによって強制される)。これを抑えるため、サーバーは DPoP プルーフをその作成後の限られた時間のみ受け入れなければならない (MUST) (できれば秒または分のオーダーの比較的短い期間に限るのが望ましい)。
In the context of the target URI, servers can store the jti value of each DPoP proof for the time window in which the respective DPoP proof JWT would be accepted to prevent multiple uses of the same DPoP proof. HTTP requests to the same URI for which the jti value has been seen before would be declined. When strictly enforced, such a single-use check provides a very strong protection against DPoP proof replay, but it may not always be feasible in practice, e.g., when multiple servers behind a single endpoint have no shared state.
対象 URI の文脈において、サーバーは同じ DPoP プルーフの複数回使用を防ぐため、各 DPoP プルーフの jti 値を、対応する DPoP プルーフ JWT が受け入れられる時間ウィンドウの間保存できる。jti 値が以前に観測されている同じ URI への HTTP リクエストは拒否されることになる。厳密に強制された場合、このような単一使用の検査は DPoP プルーフのリプレイに対して非常に強力な保護を提供するが、たとえば単一のエンドポイントの背後にある複数のサーバーが状態を共有していない場合など、実際には常に実現可能とは限らない。
In order to guard against memory exhaustion attacks, a server that is tracking jti values should reject DPoP proof JWTs with unnecessarily large jti values or store only a hash thereof.
メモリ枯渇攻撃を防ぐため、jti 値を追跡するサーバーは、不必要に大きな jti 値を持つ DPoP プルーフ JWT を拒否するか、そのハッシュのみを保存するべきである。
Note: To accommodate for clock offsets, the server MAY accept DPoP proofs that carry an iat time in the reasonably near future (on the order of seconds or minutes). Because clock skews between servers and clients may be large, servers MAY limit DPoP proof lifetimes by using server-provided nonce values containing the time at the server rather than comparing the client-supplied iat time to the time at the server. Nonces created in this way yield the same result even in the face of arbitrarily large clock skews.
注: クロックのずれに対応するため、サーバーは合理的な範囲で近い将来 (秒または分のオーダー) の iat 時刻を持つ DPoP プルーフを受け入れてもよい (MAY)。サーバーとクライアントの間のクロックスキューは大きくなりうるため、サーバーは、クライアントが提供した iat 時刻をサーバーの時刻と比較する代わりに、サーバーの時刻を含むサーバー提供のノンス値を用いて DPoP プルーフの有効期間を制限してもよい (MAY)。このように作成されたノンスは、クロックスキューがどれほど大きくても同じ結果をもたらす。
Server-provided nonces are an effective means for further reducing the chances for successful DPoP proof replay. Unlike cryptographic nonces, it is acceptable for clients to use the same nonce multiple times and for the server to accept the same nonce multiple times. As long as the jti value is tracked and duplicates are rejected for the lifetime of the nonce, there is no additional risk of token replay.
サーバー提供のノンスは、DPoP プルーフのリプレイが成功する可能性をさらに減らす効果的な手段である。暗号学的なノンスとは異なり、クライアントが同じノンスを複数回使用すること、およびサーバーが同じノンスを複数回受け入れることは許容される。ノンスの有効期間の間、jti 値が追跡され重複が拒否される限り、トークンリプレイの追加的なリスクはない。
11.2.DPoP Proof Pre-generation
11.2.DPoP プルーフの事前生成
An attacker in control of the client can pre-generate DPoP proofs for specific endpoints arbitrarily far into the future by choosing the iat value in the DPoP proof to be signed by the proof-of-possession key. Note that one such attacker is the person who is the legitimate user of the client. The user may pre-generate DPoP proofs to exfiltrate from the machine possessing the proof-of-possession key upon which they were generated and copy them to another machine that does not possess the key. For instance, a bank employee might pre- generate DPoP proofs on a bank computer and then copy them to another machine for use in the future, thereby bypassing bank audit controls. When DPoP proofs can be pre-generated and exfiltrated, all that is actually being proved in DPoP protocol interactions is possession of a DPoP proof -- not of the proof-of-possession key.
クライアントを制御する攻撃者は、所有証明鍵で署名される DPoP プルーフ内の iat 値を選ぶことで、特定のエンドポイント向けの DPoP プルーフを任意に遠い将来にわたって事前生成できる。そのような攻撃者の一例が、クライアントの正当なユーザーである人物であることに注意すること。ユーザーは、生成の基になった所有証明鍵を持つマシンから持ち出すために DPoP プルーフを事前生成し、鍵を持たない別のマシンにコピーできる。たとえば、銀行の従業員が銀行のコンピューター上で DPoP プルーフを事前生成し、それを将来使用するために別のマシンにコピーすることで、銀行の監査統制を回避できてしまうかもしれない。DPoP プルーフが事前生成され持ち出せる場合、DPoP のプロトコルのやり取りで実際に証明されているのは DPoP プルーフの所有であって、所有証明鍵の所有ではない。
Use of server-provided nonce values that are not predictable by attackers can prevent this attack. By providing new nonce values at times of its choosing, the server can limit the lifetime of DPoP proofs, preventing pre-generated DPoP proofs from being used. When server-provided nonces are used, possession of the proof-of- possession key is being demonstrated -- not just possession of a DPoP proof.
攻撃者が予測できないサーバー提供のノンス値を使用することで、この攻撃を防ぐことができる。サーバーは自身が選んだタイミングで新しいノンス値を提供することで DPoP プルーフの有効期間を制限し、事前生成された DPoP プルーフが使用されるのを防ぐことができる。サーバー提供のノンスが使用される場合、実証されているのは所有証明鍵の所有であり、単なる DPoP プルーフの所有ではない。
The ath claim limits the use of pre-generated DPoP proofs to the lifetime of the access token. Deployments that do not utilize the nonce mechanism SHOULD NOT issue long-lived DPoP constrained access tokens, preferring instead to use short-lived access tokens and refresh tokens. Whilst an attacker could pre-generate DPoP proofs to use the refresh token to obtain a new access token, they would be unable to realistically pre-generate DPoP proofs to use a newly issued access token.
ath クレームは、事前生成された DPoP プルーフの使用をアクセストークンの有効期間内に制限する。ノンスの仕組みを利用しないデプロイメントは、有効期間の長い DPoP 制約付きアクセストークンを発行するべきではなく (SHOULD NOT)、代わりに有効期間の短いアクセストークンとリフレッシュトークンを使用することが望ましい。攻撃者はリフレッシュトークンを使って新しいアクセストークンを取得するための DPoP プルーフを事前生成できるかもしれないが、新たに発行されたアクセストークンを使用するための DPoP プルーフを現実的に事前生成することはできない。
11.3.DPoP Nonce Downgrade
11.3.DPoP ノンスのダウングレード
A server MUST NOT accept any DPoP proofs without the nonce claim when a DPoP nonce has been provided to the client.
サーバーは、クライアントに DPoP ノンスを提供済みの場合、nonce クレームのない DPoP プルーフを受け入れてはならない (MUST NOT)。
11.4.Untrusted Code in the Client Context
11.4.クライアントのコンテキストにおける信頼できないコード
If an adversary is able to run code in the client's execution context, the security of DPoP is no longer guaranteed. Common issues in web applications leading to the execution of untrusted code are XSS and remote code inclusion attacks.
攻撃者がクライアントの実行コンテキストでコードを実行できる場合、DPoP のセキュリティはもはや保証されない。Web アプリケーションにおいて信頼できないコードの実行につながる一般的な問題は、XSS およびリモートコードインクルージョン攻撃である。
If the private key used for DPoP is stored in such a way that it cannot be exported, e.g., in a hardware or software security module, the adversary cannot exfiltrate the key and use it to create arbitrary DPoP proofs. The adversary can, however, create new DPoP proofs as long as the client is online and uses these proofs (together with the respective tokens) either on the victim's device or on a device under the attacker's control to send arbitrary requests that will be accepted by servers.
DPoP に用いる秘密鍵が、たとえばハードウェアまたはソフトウェアのセキュリティモジュール内など、エクスポートできない形で保存されている場合、攻撃者は鍵を持ち出して任意の DPoP プルーフの作成に用いることはできない。しかし攻撃者は、クライアントがオンラインである限り新しい DPoP プルーフを作成でき、これらのプルーフを (対応するトークンとともに) 被害者のデバイス上または攻撃者の管理下にあるデバイス上で使用して、サーバーに受け入れられる任意のリクエストを送信できる。
To send requests even when the client is offline, an adversary can try to pre-compute DPoP proofs using timestamps in the future and exfiltrate these together with the access or refresh token.
クライアントがオフラインのときにもリクエストを送るために、攻撃者は将来のタイムスタンプを用いて DPoP プルーフを事前計算し、これらをアクセストークンまたはリフレッシュトークンとともに持ち出そうとする可能性がある。
An adversary might further try to associate tokens issued from the token endpoint with a key pair under the adversary's control. One way to achieve this is to modify existing code, e.g., by replacing cryptographic APIs. Another way is to launch a new authorization grant between the client and the authorization server in an iframe. This grant needs to be "silent", i.e., not require interaction with the user. With code running in the client's origin, the adversary has access to the resulting authorization code and can use it to associate their own DPoP keys with the tokens returned from the token endpoint. The adversary is then able to use the resulting tokens on their own device even if the client is offline.
攻撃者はさらに、トークンエンドポイントから発行されるトークンを攻撃者の管理下にある鍵ペアに関連付けようとするかもしれない。これを達成する 1 つの方法は、たとえば暗号 API を置き換えるなどして既存のコードを改変することである。別の方法は、iframe 内でクライアントと認可サーバーの間の新しい認可グラントを開始することである。このグラントは「サイレント」である、すなわちユーザーとの対話を必要としないものでなければならない。クライアントのオリジンで実行されるコードを持つ攻撃者は、結果として得られる認可コードにアクセスでき、それを用いて自身の DPoP 鍵をトークンエンドポイントから返されるトークンに関連付けることができる。攻撃者はその後、クライアントがオフラインであっても、得られたトークンを自身のデバイス上で使用できるようになる。
Therefore, protecting clients against the execution of untrusted code is extremely important even if DPoP is used. Besides secure coding practices, Content Security Policy [W3C.CSP] can be used as a second layer of defense against XSS.
したがって、DPoP を使用する場合であっても、信頼できないコードの実行からクライアントを保護することは極めて重要である。安全なコーディングプラクティスに加え、XSS に対する第 2 の防御層として Content Security Policy [W3C.CSP] を使用できる。
11.5.Signed JWT Swapping
11.5.署名付き JWT のすり替え
Servers accepting signed DPoP proof JWTs MUST verify that the typ field is dpop+jwt in the headers of the JWTs to ensure that adversaries cannot use JWTs created for other purposes.
署名付き DPoP プルーフ JWT を受け入れるサーバーは、攻撃者が他の目的で作成された JWT を使用できないようにするため、JWT のヘッダー内の typ フィールドが dpop+jwt であることを検証しなければならない (MUST)。
11.6.Signature Algorithms
11.6.署名アルゴリズム
Implementers MUST ensure that only asymmetric digital signature algorithms (such as ES256) that are deemed secure can be used for signing DPoP proofs. In particular, the algorithm none MUST NOT be allowed.
実装者は、安全と見なされる非対称デジタル署名アルゴリズム (ES256 など) のみが DPoP プルーフの署名に使用できることを保証しなければならない (MUST)。特に、アルゴリズム none は許可してはならない (MUST NOT)。
11.7.Request Integrity
11.7.リクエストの完全性
DPoP does not ensure the integrity of the payload or headers of requests. The DPoP proof only contains claims for the HTTP URI and method, but not the message body or general request headers, for example.
DPoP はリクエストのペイロードやヘッダーの完全性を保証しない。DPoP プルーフは HTTP の URI とメソッドに関するクレームのみを含み、たとえばメッセージボディや一般的なリクエストヘッダーは含まない。
This is an intentional design decision intended to keep DPoP simple to use, but as described, it makes DPoP potentially susceptible to replay attacks where an attacker is able to modify message contents and headers. In many setups, the message integrity and confidentiality provided by TLS is sufficient to provide a good level of protection.
これは DPoP の使用を簡単に保つための意図的な設計判断であるが、上述のとおり、攻撃者がメッセージの内容やヘッダーを改変できる場合のリプレイ攻撃に対して DPoP が潜在的に脆弱になる。多くの構成では、TLS が提供するメッセージの完全性と機密性で十分なレベルの保護が得られる。
Note: While signatures covering other parts of requests are out of the scope of this specification, additional information to be signed can be added into DPoP proofs.
注: リクエストの他の部分を対象とする署名は本仕様の範囲外であるが、署名対象とする追加情報を DPoP プルーフに加えることはできる。
11.8.Access Token and Public Key Binding
11.8.アクセストークンと公開鍵の紐付け
The binding of the access token to the DPoP public key, as specified in Section 6, uses a cryptographic hash of the JWK representation of the public key. It relies on the hash function having sufficient second-preimage resistance so as to make it computationally infeasible to find or create another key that produces to the same hash output value. The SHA-256 hash function was used because it meets the aforementioned requirement while being widely available.
6 節で規定するアクセストークンの DPoP 公開鍵への紐付けは、公開鍵の JWK 表現の暗号学的ハッシュを用いる。これは、同じハッシュ出力値を生成する別の鍵を見つける、あるいは作成することが計算上実行不可能となるよう、ハッシュ関数が十分な第二原像計算困難性を持つことに依存している。SHA-256 ハッシュ関数は、前述の要件を満たしつつ広く利用可能であるため採用された。
Similarly, the binding of the DPoP proof to the access token uses a hash of that access token as the value of the ath claim in the DPoP proof (see Section 4.2). This relies on the value of the hash being sufficiently unique so as to reliably identify the access token. The collision resistance of SHA-256 meets that requirement.
同様に、DPoP プルーフのアクセストークンへの紐付けは、そのアクセストークンのハッシュを DPoP プルーフの ath クレームの値として用いる (4.2 節参照)。これは、そのハッシュ値がアクセストークンを確実に識別できる程度に十分一意であることに依存している。SHA-256 の衝突耐性はその要件を満たす。
11.9.Authorization Code and Public Key Binding
11.9.認可コードと公開鍵の紐付け
Cryptographic binding of the authorization code to the DPoP public key is specified in Section 10. This binding prevents attacks in which the attacker captures the authorization code and creates a DPoP proof using a proof-of-possession key other than the one held by the client and redeems the authorization code using that DPoP proof. By ensuring end to end that only the client's DPoP key can be used, this prevents captured authorization codes from being exfiltrated and used at locations other than the one to which the authorization code was issued.
認可コードの DPoP 公開鍵への暗号学的な紐付けは 10 節で規定する。この紐付けは、攻撃者が認可コードを捕捉し、クライアントが保持するものとは別の所有証明鍵を用いて DPoP プルーフを作成し、その DPoP プルーフで認可コードを引き換える攻撃を防ぐ。クライアントの DPoP 鍵のみが使用できることをエンドツーエンドで保証することで、捕捉された認可コードが持ち出され、その認可コードが発行された場所以外で使用されることを防ぐ。
Authorization codes can, for instance, be harvested by attackers from places where the HTTP messages containing them are logged. Even when efforts are made to make authorization codes one-time-use, in practice, there is often a time window during which attackers can replay them. For instance, when authorization servers are implemented as scalable replicated services, some replicas may temporarily not yet have the information needed to prevent replay. DPoP binding of the authorization code solves these problems.
認可コードは、たとえば、それを含む HTTP メッセージがログに記録される場所から攻撃者によって収集されうる。認可コードを一度限りの使用にする努力がなされている場合でも、実際には攻撃者がそれをリプレイできる時間ウィンドウがしばしば存在する。たとえば、認可サーバーがスケーラブルな複製されたサービスとして実装されている場合、一部のレプリカは一時的に、リプレイを防ぐのに必要な情報をまだ持っていないことがある。認可コードの DPoP 紐付けはこれらの問題を解決する。
If an authorization server does not (or cannot) strictly enforce the single-use limitation for authorization codes and an attacker can access the authorization code (and if PKCE is used, the code_verifier), the attacker can create a forged token request, binding the resulting token to an attacker-controlled key. For example, using XSS, attackers might obtain access to the authorization code and PKCE parameters. Use of the dpop_jkt parameter prevents this attack.
認可サーバーが認可コードの単一使用制限を厳密に強制しない (または強制できない) 場合で、攻撃者が認可コード (および PKCE が使用されている場合は code_verifier) にアクセスできるなら、攻撃者は偽造したトークンリクエストを作成し、結果として得られるトークンを攻撃者の管理下にある鍵に紐付けることができる。たとえば、XSS を用いて、攻撃者は認可コードと PKCE パラメータへのアクセスを得るかもしれない。dpop_jkt パラメータの使用はこの攻撃を防ぐ。
The binding of the authorization code to the DPoP public key uses a JWK Thumbprint of the public key, just as the access token binding does. The same JWK Thumbprint considerations apply.
認可コードの DPoP 公開鍵への紐付けは、アクセストークンの紐付けと同様に、公開鍵の JWK Thumbprint を用いる。JWK Thumbprint に関する同じ考慮事項が適用される。
11.10.Hash Algorithm Agility
11.10.ハッシュアルゴリズムのアジリティ
The jkt confirmation method member, the ath JWT claim, and the dpop_jkt authorization request parameter defined herein all use the output of the SHA-256 hash function as their value. The use of a single hash function by this specification was intentional and aimed at simplicity and avoidance of potential security and interoperability issues arising from common mistakes implementing and deploying parameterized algorithm agility schemes. However, the use of a different hash function is not precluded if future circumstances change and make SHA-256 insufficient for the requirements of this specification. Should that need arise, it is expected that a short specification will be produced that updates this one. Using the output of an appropriate hash function as the value, that specification will likely define a new confirmation method member, a new JWT claim, and a new authorization request parameter. These items will be used in place of, or alongside, their respective counterparts in the same message structures and flows of the larger protocol defined by this specification.
本文書で定義する jkt 確認方式メンバー、ath JWT クレーム、および dpop_jkt 認可リクエストパラメータはいずれも、SHA-256 ハッシュ関数の出力をその値として用いる。本仕様が単一のハッシュ関数を用いるのは意図的なものであり、簡潔さと、パラメータ化されたアルゴリズムアジリティ方式の実装やデプロイにおけるよくある誤りから生じる潜在的なセキュリティおよび相互運用性の問題の回避を目的としている。しかし、将来状況が変わり SHA-256 が本仕様の要件に対して不十分になった場合に、別のハッシュ関数を使用することを妨げるものではない。その必要が生じた場合、本仕様を更新する短い仕様が作成されることが期待される。その仕様は、適切なハッシュ関数の出力を値として用いる、新しい確認方式メンバー、新しい JWT クレーム、および新しい認可リクエストパラメータを定義することになるだろう。これらの項目は、本仕様が定義するより大きなプロトコルの同じメッセージ構造とフローにおいて、それぞれ対応するものの代わりに、またはそれらと並んで使用される。
11.11.Binding to Client Identity
11.11.クライアントアイデンティティへの紐付け
In cases where DPoP is used with client authentication, it is only bound to authentication by being coincident in the same TLS tunnel. Since the DPoP proof is not directly bound to the authentication cryptographically, it's possible that the authentication or the DPoP messages were copied into the tunnel. While including the URI in the DPoP can partially mitigate some of this risk, modifying the authentication mechanism to provide cryptographic binding between authentication and DPoP could provide better protection. However, providing additional binding with authentication through the modification of authentication mechanisms or other means is beyond the scope of this specification.
DPoP がクライアント認証とともに使用される場合、DPoP は同じ TLS トンネル内で同時に発生するという点でのみ認証に紐付けられる。DPoP プルーフは認証に暗号学的に直接紐付けられていないため、認証または DPoP のメッセージがトンネル内にコピーされた可能性がある。DPoP に URI を含めることでこのリスクの一部を部分的に軽減できるが、認証と DPoP の間に暗号学的な紐付けを提供するように認証の仕組みを変更すれば、より良い保護が得られる可能性がある。しかし、認証の仕組みの変更やその他の手段によって認証との追加的な紐付けを提供することは、本仕様の範囲外である。
12.IANA Considerations
12.IANA に関する考慮事項
12.1.OAuth Access Token Types Registration
12.1.OAuth アクセストークンタイプの登録
IANA has registered the following access token type in the "OAuth Access Token Types" registry [IANA.OAuth.Params] established by [RFC6749].
IANA は、[RFC6749] によって設けられた "OAuth Access Token Types" レジストリ [IANA.OAuth.Params] に、以下のアクセストークンタイプを登録した。
Name: DPoP
名前: DPoP
Additional Token Endpoint Response Parameters: (none)
追加のトークンエンドポイントレスポンスパラメータ: (なし)
HTTP Authentication Scheme(s): DPoP
HTTP 認証スキーム: DPoP
Change Controller: IETF
変更管理者: IETF
Reference: RFC 9449
参照: RFC 9449
12.2.OAuth Extensions Error Registration
12.2.OAuth 拡張エラーの登録
IANA has registered the following error values in the "OAuth Extensions Error" registry [IANA.OAuth.Params] established by [RFC6749].
IANA は、[RFC6749] によって設けられた "OAuth Extensions Error" レジストリ [IANA.OAuth.Params] に、以下のエラー値を登録した。
Invalid DPoP proof:
無効な DPoP プルーフ:
Name: invalid_dpop_proof
Usage Location: token error response, resource access error response
使用場所: トークンエラーレスポンス、リソースアクセスエラーレスポンス
Protocol Extension: Demonstrating Proof of Possession (DPoP)
Protocol Extension: Demonstrating Proof of Possession (DPoP)
Change Controller: IETF
Reference: RFC 9449
Use DPoP nonce:
DPoP ノンスの使用:
Name: use_dpop_nonce
Usage Location: token error response, resource access error response
使用場所: トークンエラーレスポンス、リソースアクセスエラーレスポンス
Protocol Extension: Demonstrating Proof of Possession (DPoP)
プロトコル拡張: Demonstrating Proof of Possession (DPoP)
Change Controller: IETF
Reference: RFC 9449
12.3.OAuth Parameters Registration
12.3.OAuth パラメータの登録
IANA has registered the following authorization request parameter in the "OAuth Parameters" registry [IANA.OAuth.Params] established by [RFC6749].
IANA は、[RFC6749] によって設けられた "OAuth Parameters" レジストリ [IANA.OAuth.Params] に、以下の認可リクエストパラメータを登録した。
Name: dpop_jkt
名前: dpop_jkt
Parameter Usage Location: authorization request
パラメータの使用場所: 認可リクエスト
Change Controller: IETF
変更管理者: IETF
Reference: Section 10 of RFC 9449
参照: RFC 9449 の 10 節
12.4.HTTP Authentication Schemes Registration
12.4.HTTP 認証スキームの登録
IANA has registered the following scheme in the "HTTP Authentication Schemes" registry [IANA.HTTP.AuthSchemes] established by [RFC9110], Section 16.4.1.
IANA は、[RFC9110] の 16.4.1 節によって設けられた "HTTP Authentication Schemes" レジストリ [IANA.HTTP.AuthSchemes] に、以下のスキームを登録した。
Authentication Scheme Name: DPoP
認証スキーム名: DPoP
Reference: Section 7.1 of RFC 9449
参照: RFC 9449 の 7.1 節
12.5.Media Type Registration
12.5.メディアタイプの登録
IANA has registered the application/dpop+jwt media type [RFC2046] in the "Media Types" registry [IANA.MediaTypes] in the manner described in [RFC6838], which is used to indicate that the content is a DPoP JWT.
IANA は、[RFC6838] に記述された方法で、"Media Types" レジストリ [IANA.MediaTypes] に application/dpop+jwt メディアタイプ [RFC2046] を登録した。これはコンテンツが DPoP JWT であることを示すために用いられる。
Type name: application
タイプ名: application
Subtype name: dpop+jwt
サブタイプ名: dpop+jwt
Required parameters: n/a
必須パラメータ: n/a
Optional parameters: n/a
任意パラメータ: n/a
Encoding considerations: binary. A DPoP JWT is a JWT; JWT values are encoded as a series of base64url-encoded values (some of which may be the empty string) separated by period ('.') characters.
エンコーディングに関する考慮事項: binary。DPoP JWT は JWT であり、JWT の値はピリオド ('.') 文字で区切られた一連の base64url エンコード値 (その一部は空文字列であってもよい) としてエンコードされる。
Security considerations: See Section 11 of RFC 9449
セキュリティに関する考慮事項: RFC 9449 の 11 節を参照
Interoperability considerations: n/a
相互運用性に関する考慮事項: n/a
Published specification: RFC 9449
公開仕様: RFC 9449
Applications that use this media type: Applications using RFC 9449 for application-level proof of possession
このメディアタイプを使用するアプリケーション: アプリケーションレベルの所有証明に RFC 9449 を使用するアプリケーション
Fragment identifier considerations: n/a
フラグメント識別子に関する考慮事項: n/a
Additional information:
追加情報:
File extension(s): n/a
Macintosh file type code(s): n/aPerson & email address to contact for further information: Michael B. Jones, michael_b_jones@hotmail.com
詳細情報の連絡先となる人物とメールアドレス: Michael B. Jones, michael_b_jones@hotmail.com
Intended usage: COMMON
想定される用途: COMMON
Restrictions on usage: none
使用上の制限: なし
Author: Michael B. Jones, michael_b_jones@hotmail.com
著者: Michael B. Jones, michael_b_jones@hotmail.com
Change controller: IETF
変更管理者: IETF
12.6.JWT Confirmation Methods Registration
12.6.JWT 確認方式の登録
IANA has registered the following JWT cnf member value in the "JWT Confirmation Methods" registry [IANA.JWT] established by [RFC7800].
IANA は、[RFC7800] によって設けられた "JWT Confirmation Methods" レジストリ [IANA.JWT] に、以下の JWT cnf メンバー値を登録した。
Confirmation Method Value: jkt
確認方式の値: jkt
Confirmation Method Description: JWK SHA-256 Thumbprint
確認方式の説明: JWK SHA-256 Thumbprint
Change Controller: IETF
変更管理者: IETF
Reference: Section 6 of RFC 9449
参照: RFC 9449 の 6 節
12.7.JSON Web Token Claims Registration
12.7.JSON Web Token クレームの登録
IANA has registered the following Claims in the "JSON Web Token Claims" registry [IANA.JWT] established by [RFC7519].
IANA は、[RFC7519] によって設けられた "JSON Web Token Claims" レジストリ [IANA.JWT] に、以下のクレームを登録した。
HTTP method:
HTTP メソッド:
Claim Name: htm
Claim Description: The HTTP method of the request
Change Controller: IETF
Reference: Section 4.2 of RFC 9449
HTTP URI:
HTTP URI:
Claim Name: htu
Claim Description: The HTTP URI of the request (without query and fragment parts)
クレームの説明: リクエストの HTTP URI (クエリ部とフラグメント部を除く)
Change Controller: IETF
Reference: Section 4.2 of RFC 9449
Access token hash:
アクセストークンハッシュ:
Claim Name: ath
Claim Description: The base64url-encoded SHA-256 hash of the ASCII encoding of the associated access token's value
クレームの説明: 関連付けられたアクセストークンの値の ASCII エンコーディングに対する SHA-256 ハッシュを base64url エンコードしたもの
Change Controller: IETF
Reference: Section 4.2 of RFC 9449
12.7.1."nonce" Registration Update
12.7.1."nonce" の登録更新
The Internet Security Glossary [RFC4949] provides a useful definition of nonce as a random or non-repeating value that is included in data exchanged by a protocol, usually for the purpose of guaranteeing liveness and thus detecting and protecting against replay attacks.
Internet Security Glossary [RFC4949] は、ノンスについて、プロトコルで交換されるデータに含まれるランダムまたは繰り返しのない値であり、通常はライブネスを保証し、それによってリプレイ攻撃を検出して防御することを目的とするものである、という有用な定義を与えている。
However, the initial registration of the nonce claim by [OpenID.Core] used language that was contextually specific to that application, which was potentially limiting to its general applicability.
しかし、[OpenID.Core] による nonce クレームの最初の登録では、そのアプリケーションに文脈上固有の表現が用いられており、一般的な適用可能性を制限する可能性があった。
Therefore, IANA has updated the entry for nonce in the "JSON Web Token Claims" registry [IANA.JWT] with an expanded definition to reflect that the claim can be used appropriately in other contexts and with the addition of this document as a reference, as follows.
そのため IANA は、"JSON Web Token Claims" レジストリ [IANA.JWT] の nonce のエントリを、このクレームが他の文脈でも適切に使用できることを反映するよう拡張した定義に更新し、本文書を参照として追加した。更新後の内容は以下のとおりである。
Claim Name: nonce
クレーム名: nonce
Claim Description: Value used to associate a Client session with an ID Token (MAY also be used for nonce values in other applications of JWTs)
クレームの説明: クライアントセッションを ID トークンに関連付けるために用いる値 (JWT の他の用途におけるノンス値にも使用してもよい (MAY))
Change Controller: OpenID Foundation Artifact Binding Working Group, openid-specs-ab@lists.openid.net
変更管理者: OpenID Foundation Artifact Binding Working Group, openid-specs-ab@lists.openid.net
Specification Document(s): Section 2 of [OpenID.Core] and RFC 9449
仕様文書: [OpenID.Core] の 2 節および RFC 9449
12.8.Hypertext Transfer Protocol (HTTP) Field Name Registration
12.8.Hypertext Transfer Protocol (HTTP) フィールド名の登録
IANA has registered the following HTTP header fields, as specified by this document, in the "Hypertext Transfer Protocol (HTTP) Field Name Registry" [IANA.HTTP.Fields] established by [RFC9110]:
IANA は、[RFC9110] によって設けられた "Hypertext Transfer Protocol (HTTP) Field Name Registry" [IANA.HTTP.Fields] に、本文書で規定する以下の HTTP ヘッダーフィールドを登録した。
DPoP:
Field Name: DPoP
Status: permanent
Reference: RFC 9449
DPoP-Nonce:
DPoP-Nonce:
Field Name: DPoP-Nonce
Status: permanent
Reference: RFC 9449
12.9.OAuth Authorization Server Metadata Registration
12.9.OAuth 認可サーバーメタデータの登録
IANA has registered the following value in the "OAuth Authorization Server Metadata" registry [IANA.OAuth.Params] established by [RFC8414].
IANA は、[RFC8414] によって設けられた "OAuth Authorization Server Metadata" レジストリ [IANA.OAuth.Params] に、以下の値を登録した。
Metadata Name: dpop_signing_alg_values_supported
メタデータ名: dpop_signing_alg_values_supported
Metadata Description: JSON array containing a list of the JWS algorithms supported for DPoP proof JWTs
メタデータの説明: DPoP プルーフ JWT に対してサポートされる JWS アルゴリズムのリストを含む JSON 配列
Change Controller: IETF
変更管理者: IETF
Reference: Section 5.1 of RFC 9449
参照: RFC 9449 の 5.1 節
12.10.OAuth Dynamic Client Registration Metadata
12.10.OAuth 動的クライアント登録メタデータ
IANA has registered the following value in the IANA "OAuth Dynamic Client Registration Metadata" registry [IANA.OAuth.Params] established by [RFC7591].
IANA は、[RFC7591] によって設けられた IANA の "OAuth Dynamic Client Registration Metadata" レジストリ [IANA.OAuth.Params] に、以下の値を登録した。
Client Metadata Name: dpop_bound_access_tokens
クライアントメタデータ名: dpop_bound_access_tokens
Client Metadata Description: Boolean value specifying whether the client always uses DPoP for token requests
クライアントメタデータの説明: クライアントがトークンリクエストで常に DPoP を使用するかどうかを指定するブール値
Change Controller: IETF
変更管理者: IETF
Reference: Section 5.2 of RFC 9449
参照: RFC 9449 の 5.2 節
13.References
13.参照文献
13.1.Normative References
13.1.引用規格
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, DOI 10.17487/RFC3986, January 2005,
<https://www.rfc-editor.org/info/rfc3986>. [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", STD 68, RFC 5234,
DOI 10.17487/RFC5234, January 2008,
<https://www.rfc-editor.org/info/rfc5234>. [RFC6125] Saint-Andre, P. and J. Hodges, "Representation and
Verification of Domain-Based Application Service Identity
within Internet Public Key Infrastructure Using X.509
(PKIX) Certificates in the Context of Transport Layer
Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March
2011, <https://www.rfc-editor.org/info/rfc6125>. [RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework",
RFC 6749, DOI 10.17487/RFC6749, October 2012,
<https://www.rfc-editor.org/info/rfc6749>. [RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization
Framework: Bearer Token Usage", RFC 6750,
DOI 10.17487/RFC6750, October 2012,
<https://www.rfc-editor.org/info/rfc6750>. [RFC7515] Jones, M., Bradley, J., and N. Sakimura, "JSON Web
Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May
2015, <https://www.rfc-editor.org/info/rfc7515>. [RFC7517] Jones, M., "JSON Web Key (JWK)", RFC 7517,
DOI 10.17487/RFC7517, May 2015,
<https://www.rfc-editor.org/info/rfc7517>. [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token
(JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015,
<https://www.rfc-editor.org/info/rfc7519>. [RFC7638] Jones, M. and N. Sakimura, "JSON Web Key (JWK)
Thumbprint", RFC 7638, DOI 10.17487/RFC7638, September
2015, <https://www.rfc-editor.org/info/rfc7638>. [RFC7800] Jones, M., Bradley, J., and H. Tschofenig, "Proof-of-
Possession Key Semantics for JSON Web Tokens (JWTs)",
RFC 7800, DOI 10.17487/RFC7800, April 2016,
<https://www.rfc-editor.org/info/rfc7800>. [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>. [SHS] National Institute of Standards and Technology, "Secure
Hash Standard (SHS)", FIPS PUB 180-4,
DOI 10.6028/NIST.FIPS.180-4, August 2015,
<http://dx.doi.org/10.6028/NIST.FIPS.180-4>.13.2.Informative References
13.2.参考文献
[BREACH] CVE, "CVE-2013-3587", <https://cve.mitre.org/cgi-bin/
cvename.cgi?name=CVE-2013-3587>. [Cloudbleed]
Graham-Cumming, J., "Incident report on memory leak caused
by Cloudflare parser bug", February 2017,
<https://blog.cloudflare.com/incident-report-on-memory-
leak-caused-by-cloudflare-parser-bug/>. [CRIME] CVE, "CVE-2012-4929", <https://cve.mitre.org/cgi-bin/
cvename.cgi?name=cve-2012-4929>. [GitHub.Tokens]
Hanley, M., "Security alert: Attack campaign involving
stolen OAuth user tokens issued to two third-party
integrators", April 2022, <https://github.blog/2022-04-15-
security-alert-stolen-oauth-user-tokens/>. [Heartbleed]
"CVE-2014-0160", <https://cve.mitre.org/cgi-bin/
cvename.cgi?name=cve-2014-0160>. [IANA.HTTP.AuthSchemes]
IANA, "Hypertext Transfer Protocol (HTTP) Authentication
Scheme Registry",
<https://www.iana.org/assignments/http-authschemes/>. [IANA.HTTP.Fields]
IANA, "Hypertext Transfer Protocol (HTTP) Field Name
Registry",
<https://www.iana.org/assignments/http-fields/>. [IANA.JOSE.ALGS]
IANA, "JSON Web Signature and Encryption Algorithms",
<https://www.iana.org/assignments/jose/>. [IANA.JWT] IANA, "JSON Web Token Claims",
<https://www.iana.org/assignments/jwt/>. [IANA.MediaTypes]
IANA, "Media Types",
<https://www.iana.org/assignments/media-types/>. [IANA.OAuth.Params]
IANA, "OAuth Parameters",
<https://www.iana.org/assignments/oauth-parameters/>. [OpenID.Core]
Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and
C. Mortimore, "OpenID Connect Core 1.0 incorporating
errata set 1", November 2014,
<https://openid.net/specs/openid-connect-core-1_0.html>. [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part Two: Media Types", RFC 2046,
DOI 10.17487/RFC2046, November 1996,
<https://www.rfc-editor.org/info/rfc2046>. [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally
Unique IDentifier (UUID) URN Namespace", RFC 4122,
DOI 10.17487/RFC4122, July 2005,
<https://www.rfc-editor.org/info/rfc4122>. [RFC4949] Shirey, R., "Internet Security Glossary, Version 2",
FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007,
<https://www.rfc-editor.org/info/rfc4949>. [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type
Specifications and Registration Procedures", BCP 13,
RFC 6838, DOI 10.17487/RFC6838, January 2013,
<https://www.rfc-editor.org/info/rfc6838>. [RFC7523] Jones, M., Campbell, B., and C. Mortimore, "JSON Web Token
(JWT) Profile for OAuth 2.0 Client Authentication and
Authorization Grants", RFC 7523, DOI 10.17487/RFC7523, May
2015, <https://www.rfc-editor.org/info/rfc7523>. [RFC7591] Richer, J., Ed., Jones, M., Bradley, J., Machulak, M., and
P. Hunt, "OAuth 2.0 Dynamic Client Registration Protocol",
RFC 7591, DOI 10.17487/RFC7591, July 2015,
<https://www.rfc-editor.org/info/rfc7591>. [RFC7636] Sakimura, N., Ed., Bradley, J., and N. Agarwal, "Proof Key
for Code Exchange by OAuth Public Clients", RFC 7636,
DOI 10.17487/RFC7636, September 2015,
<https://www.rfc-editor.org/info/rfc7636>. [RFC7662] Richer, J., Ed., "OAuth 2.0 Token Introspection",
RFC 7662, DOI 10.17487/RFC7662, October 2015,
<https://www.rfc-editor.org/info/rfc7662>. [RFC8414] Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0
Authorization Server Metadata", RFC 8414,
DOI 10.17487/RFC8414, June 2018,
<https://www.rfc-editor.org/info/rfc8414>. [RFC8705] Campbell, B., Bradley, J., Sakimura, N., and T.
Lodderstedt, "OAuth 2.0 Mutual-TLS Client Authentication
and Certificate-Bound Access Tokens", RFC 8705,
DOI 10.17487/RFC8705, February 2020,
<https://www.rfc-editor.org/info/rfc8705>. [RFC8707] Campbell, B., Bradley, J., and H. Tschofenig, "Resource
Indicators for OAuth 2.0", RFC 8707, DOI 10.17487/RFC8707,
February 2020, <https://www.rfc-editor.org/info/rfc8707>. [RFC8725] Sheffer, Y., Hardt, D., and M. Jones, "JSON Web Token Best
Current Practices", BCP 225, RFC 8725,
DOI 10.17487/RFC8725, February 2020,
<https://www.rfc-editor.org/info/rfc8725>. [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu,
"Handling Long Lines in Content of Internet-Drafts and
RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020,
<https://www.rfc-editor.org/info/rfc8792>. [RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
Ed., "HTTP Semantics", STD 97, RFC 9110,
DOI 10.17487/RFC9110, June 2022,
<https://www.rfc-editor.org/info/rfc9110>. [RFC9126] Lodderstedt, T., Campbell, B., Sakimura, N., Tonge, D.,
and F. Skokan, "OAuth 2.0 Pushed Authorization Requests",
RFC 9126, DOI 10.17487/RFC9126, September 2021,
<https://www.rfc-editor.org/info/rfc9126>. [SECURITY-TOPICS]
Lodderstedt, T., Bradley, J., Labunets, A., and D. Fett,
"OAuth 2.0 Security Best Current Practice", Work in
Progress, Internet-Draft, draft-ietf-oauth-security-
topics-23, 5 June 2023,
<https://datatracker.ietf.org/doc/html/draft-ietf-oauth-
security-topics-23>. [TOKEN-BINDING]
Jones, M., Campbell, B., Bradley, J., and W. Denniss,
"OAuth 2.0 Token Binding", Work in Progress, Internet-
Draft, draft-ietf-oauth-token-binding-08, 19 October 2018,
<https://datatracker.ietf.org/doc/html/draft-ietf-oauth-
token-binding-08>. [W3C.CSP] West, M., "Content Security Policy Level 3", W3C Working
Draft, July 2023, <https://www.w3.org/TR/CSP3/>. [W3C.WebCryptoAPI]
Watson, M., "Web Cryptography API", W3C Recommendation,
January 2017,
<https://www.w3.org/TR/2017/REC-WebCryptoAPI-20170126>. [WHATWG.Fetch]
WHATWG, "Fetch Living Standard", July 2023,
<https://fetch.spec.whatwg.org/>.Acknowledgements
謝辞
We would like to thank Brock Allen, Annabelle Backman, Dominick Baier, Spencer Balogh, Vittorio Bertocci, Jeff Corrigan, Domingos Creado, Philippe De Ryck, Andrii Deinega, William Denniss, Vladimir Dzhuvinov, Mike Engan, Nikos Fotiou, Mark Haine, Dick Hardt, Joseph Heenan, Bjorn Hjelm, Jacob Ideskog, Jared Jennings, Benjamin Kaduk, Pieter Kasselman, Neil Madden, Rohan Mahy, Karsten Meyer zu Selhausen, Nicolas Mora, Steinar Noem, Mark Nottingham, Rob Otto, Aaron Parecki, Michael Peck, Roberto Polli, Paul Querna, Justin Richer, Joseph Salowey, Rifaat Shekh-Yusef, Filip Skokan, Dmitry Telegin, Dave Tonge, Jim Willeke, and others for their valuable input, feedback, and general support of this work.
Brock Allen、Annabelle Backman、Dominick Baier、Spencer Balogh、Vittorio Bertocci、Jeff Corrigan、Domingos Creado、Philippe De Ryck、Andrii Deinega、William Denniss、Vladimir Dzhuvinov、Mike Engan、Nikos Fotiou、Mark Haine、Dick Hardt、Joseph Heenan、Bjorn Hjelm、Jacob Ideskog、Jared Jennings、Benjamin Kaduk、Pieter Kasselman、Neil Madden、Rohan Mahy、Karsten Meyer zu Selhausen、Nicolas Mora、Steinar Noem、Mark Nottingham、Rob Otto、Aaron Parecki、Michael Peck、Roberto Polli、Paul Querna、Justin Richer、Joseph Salowey、Rifaat Shekh-Yusef、Filip Skokan、Dmitry Telegin、Dave Tonge、Jim Willeke、ならびにその他の方々に、本作業への貴重な意見、フィードバック、そして全般的な支援に対して感謝する。
This document originated from discussions at the 4th OAuth Security Workshop in Stuttgart, Germany. We thank the organizers of this workshop (Ralf Küsters and Guido Schmitz).
本文書は、ドイツのシュトゥットガルトで開催された第 4 回 OAuth Security Workshop での議論から生まれた。このワークショップの主催者 (Ralf Küsters および Guido Schmitz) に感謝する。