[19] [DFN[[CODE(URI)@en[[[state]]]]]] [[引数]]は、 [[CSRF]]
対策のために状態を表す値を指定するものです。

* 仕様書

[REFS[
- [1] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-4.1.1>
- [6] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-4.1.2>
-- [7] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-4.1.2.1>
- [8] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-4.2.1>
- [9] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-4.2.2>
-- [10] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-4.2.2.1>
- [11] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-10.8>
- [13] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-10.12>
- [16] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#appendix-A.5>
- [18] [CITE@en[RFC 6819 - OAuth 2.0 Threat Model and Security Considerations]] ([TIME[2015-02-10 06:43:00 +09:00]] 版) <http://tools.ietf.org/html/rfc6819#section-5.3.5>
]REFS]

* 意味

[3] [CODE(URI)@en[[[state]]]] [[引数]]の値は、[[クライアント]]が[[要求]]と[[コールバック]]との間で[RUBYB[状態]@en[state]]を維持するために使う[[不透明]]な値です。 [SRC[>>1, >>8]]

[5] この[[引数]]は、 [[CSRF]] 対策のために使う[['''べきです''']] [SRC[>>1, >>8]]。

[12] [CODE(URI)@en[[[state]]]] [[引数]]の値には、[[クライアント]]や[[資源所有者]]の繊細な情報を[[平文]]で含める[['''べきではありません''']] [SRC[>>11]]。

* 構文

[17] この[[引数]]の値は、1文字以上の[[印字可能ASCII文字]]の列です [SRC[>>16]]。

* 文脈

[2] [[認可符号]]や[[アクセストークン]]を取得するための[[認可エンドポイント]] 
[WEAK[(に[[資源所有者]]にアクセスさせるための[[クライアント]]から[[資源所有者]]への[[応答]]で示す[[リダイレクトURL]])]]
では、 [CODE(URI)@en[[[state]]]] [[引数]]を指定する[['''べきです''']] [SRC[>>1, >>8]]。

[4] [[認可鯖]]は[[資源所有者]] (の[[利用者エージェント]])
を[[クライアント]]へと[[リダイレクト]]して戻す時に、
[[リダイレクトURL]]に [CODE(URI)@en[[[state]]]] [[引数]]で同じ値を (あれば)
指定しなければ[['''なりません''']] [SRC[>>1, >>6, >>7, >>8, >>9, >>10]]。

[14] [[クライアント]]は [[CSRF]] 対策を実装しなければ[['''なりません''']]。
一般的には[[リダイレクトURL]]に[[認証]]状態を表す値を含める方法が採られますが、
その値の指定には [CODE(URI)@en[[[state]]]] [[引数]]を使う[['''べき''']]です。 [SRC[>>13]]

[15] [[CSRF]] 対策に使う値は推測できないものでなければ[['''なりません''']]。
攻撃者が推測できる確率は 2[SUP[-128]] [[以下]]で[['''なければならず''']]、
2[SUP[-160]] [[以下]]である[['''べきです''']]。 [SRC[>>13]]