[23] [DFN[[CODE(HTTP)@en[[[qop]]]]]] [[引数]]は、
[[ダイジェスト認証]]が単なる[[認証]]のみを提供するのか、
[[一貫性]]の検査も行うのかを表します。

* 仕様書

[REFS[
- [4] [CITE@en[RFC 7616 - HTTP Digest Access Authentication]] ([TIME[2015-11-10 07:05:08 +09:00]] 版) <https://tools.ietf.org/html/rfc7616#section-3.3>
- [12] [CITE@en[RFC 7616 - HTTP Digest Access Authentication]] ([TIME[2015-11-10 07:05:08 +09:00]] 版) <https://tools.ietf.org/html/rfc7616#section-3.4>
- [21] [CITE@en[RFC 7616 - HTTP Digest Access Authentication]] ([TIME[2015-11-10 07:05:08 +09:00]] 版) <https://tools.ietf.org/html/rfc7616#section-3.5>
- [26] [CITE@en[RFC 7616 - HTTP Digest Access Authentication]] ([TIME[2015-11-10 07:05:08 +09:00]] 版) <https://tools.ietf.org/html/rfc7616#section-3.8>
]REFS]

* 意味

[8] [[challenge]] では、
「[RUBYB[保護の品質]@en[quality of protection]]」を示す[[字句]]のリストです
[SRC[>>4]]。

[14] [[credentials]] では、[[クライアント]]が[[メッセージ]]に適用した
「保護の品質」を示します [SRC[>>12]]。

[24] [CODE(HTTP)@en[[[Authentication-Info:]]]] [[ヘッダー]]
[SRC[>>21]] や [CODE(HTTP)@en[[[Proxy-Authentication-Info:]]]] [[ヘッダー]] [SRC[>>26]] 
では、
[[サーバー]]が[[応答]]に適用した「保護の品質」を示します。

[25] [[サーバー]]は[[クライアント]]が[[要求]]で指定したのと同じ値を使う[['''べきです''']]
[SRC[>>21]]。

* 構文

[16] [[challenge]] では、 [CODE(ABNF)@en[[[auth-param]]]] 
の[[引用文字列]]構文を使わなければ[['''なりません''']] [SRC[>>4]]。

[7] [[challenge]] では、 1つ以上の[[字句]]の列です [SRC[>>4]]。

;; [15] 不明確ですが、[[空白]]区切りと思われます。

[17] [[credentials]] では、[[サーバー]]が [[challenge]]
で示した値のいずれかでなければ[['''なりません''']] [SRC[>>12]]。

[19] [[credentials]] [SRC[>>12]] と [CODE(HTTP)@en[[[Authentication-Info:]]]]
[SRC[>>21]] や [CODE(HTTP)@en[[[Proxy-Authentication-Info:]]]] [[ヘッダー]] [SRC[>>26]] 
では、
[[引用文字列]]でなく[[字句]]を[[生成]]しなければ[['''なりません''']]。

;; [18] 1つしか指定できません。

[9] [DFN[[CODE[[[auth]]]]]] は、[[認証]]を示します [SRC[>>4, >>21]]。

[10] [DFN[[CODE[[[auth-int]]]]]] は、
[RUBYB[[[一貫性]]]@en[integrity]]保護付き[[認証]]を示します
[SRC[>>4, >>21]]。

;; [27] [CODE[[[auth-int]]]] を指定すると、[VAR[[[A2]]]] の計算で [[payload body]]
が考慮されるようになります。 この機能が開発された当時は (無いよりまし程度の)
意味があったのかもしれませんが、現在となっては無意味です。 [[payload body]]
の改竄は検知できますが、[[ヘッダー]]は改竄し放題です。
[CODE[[[auth-int]]]] でなく [[TLS]] を使うべきです。

[28] 値は[[大文字・小文字不区別]]です。

;; [29] [[RFC 7616]] はそれをまったく説明していません。1つ前の
[[RFC 2617]] は [[ABNF]] 構文で一応規定していました [SRC[>>1]]。

* 文脈

[5] [[ダイジェスト認証]]の [[challenge]] [SRC[>>4]] や
[[credentials]] [SRC[>>12]] で指定できます。

[6] [[challenge]] では、すべての実装が使わなければ[['''なりません''']] [SRC[>>4]]。

;; [13] 「使う」とは具体的に何を言っているのかは謎です。
[[RFC 2617]] は「省略可能だが [[RFC 2069]] との互換性のためなので、
すべての実装が使う[['''べき''']]」と言っていたので、
[[サーバー]]が [CODE[[[qop]]]] [[引数]]を明示するべき、
という意味だと思われます。

[22] [[ダイジェスト認証]]に成功したら、[[応答]]の
[CODE(HTTP)@en[[[Authentication-Info:]]]]
[[ヘッダー]] [SRC[>>21]] や [CODE(HTTP)@en[[[Proxy-Authentication-Info:]]]] [[ヘッダー]] [SRC[>>26]] 
の [CODE(ABNF)@en[[[auth-param]]]]
として指定できます。

* 処理

[11] [[challenge]] では、未知の指定は無視しなければ[['''なりません''']] [SRC[>>4]]。

[20] [CODE[[[response]]]] [[引数]]や [CODE[[[rspauth]]]] [[引数]]の値の計算に使われます。

* 歴史

[2] この[[引数]]は [[RFC 2069]] にはなく、 [[RFC 2617]] で追加されました。

[REFS[
- [1] [CITE@en[RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication]] ([TIME[2012-01-09 21:04:30 +09:00]] 版) <http://tools.ietf.org/html/rfc2617#section-3.2.1>
- [3] [CITE@en[RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication]] ([TIME[2012-01-09 21:04:30 +09:00]] 版) <http://tools.ietf.org/html/rfc2617#page-12>
]REFS]