REST APIのセットを作成しようとしています。これは、OAuthによって生成された添付IDトークンを使用して認証されます)プロバイダー。
OAuthの間にリダイレクトURLで渡された状態トークンを使用する方法を理解しようとしています承認フロー "。
次のシナリオで、状態トークンはどのようにして攻撃を防止しますか?
前提:バックエンドOAuthクライアント(REST APIリクエストを処理する)は、次のセッションマップを持っています- ユーザー<->状態トークン。
シナリオ:
そのような攻撃からどのように保護しますか?または、状態トークンの検証を実装する方法に何か不足していますか?.
そのような攻撃からどのように保護しますか?
これはまさに攻撃のシナリオであり、状態パラメーターは保護のために使用されます。
または、状態トークン検証を実装する方法に何か不足していますか?.
はい、キーは詳細にあります。から RFC6749 :
The client MUST implement CSRF protection for its redirection URI.
This is typically accomplished by requiring any request sent to the
redirection URI endpoint to include **a value that binds the request to
the user-agent's authenticated state** (e.g., a hash of the session
cookie used to authenticate the user-agent). The client SHOULD
**utilize the "state" request parameter to deliver this value** to the
authorization server when making an authorization request.
Once authorization has been obtained from the end-user, the
authorization server redirects the end-user's user-agent back to the
client with the required binding value contained in the "state"
parameter. **The binding value enables the client to verify the
validity of the request by matching the binding value to the
user-agent's authenticated state**. The binding value used for CSRF
protection MUST contain a non-guessable value (as described in
Section 10.10), and the user-agent's authenticated state (e.g.,
session cookie, HTML5 local storage) MUST be kept in a location
accessible only to the client and the user-agent (i.e., protected by
same-Origin policy).
したがって、重要なのは、状態の値を何らかの方法で開始側ユーザーのセッションにバインドする必要があることです。 RFCは、これを行う方法に関する提案を提供します。
OAuthクライアント(サーバー)がリダイレクトURLを受信すると、状態トークンが検証されます。これは、[...]
これが状態パラメータの出番です。状態パラメータを検証する前にアクセスコードを交換しないです。
このフローを開始したユーザーに属する値であることを確認して、状態を検証します。上記の状況では、状態は攻撃者に属し、現在の要求者が被害者であるため、これは失敗するはずです。