Spring OAuth2state
のトークンに関連するパラメーターは具体的にどの程度ですか? _csrf
state
の暗号化されたバージョン_csrf
は期待どおりですか ?
また、 Spring OAuth2 で_csrf
新しいパラメーターにカプセル化する前に、新しい値をエンコードおよび暗号化するために使用する特定の Java 構文は何ですか?state
**コンテキスト:**
クライアント アプリは、ユーザーの Web ブラウザーをクライアント アプリから承認サーバーの認証サーバー/ログイン ページにリダイレクトします。次に、認可サーバー アプリで、 のカスタム実装をOncePerRequestFilter
使用して へのリクエストを/oauth/authorize?(list of params)
追加の認証ステップにリダイレクトし、最終的に への新しいリクエストにリダイレクトし/oauth/authorize?(list of params)
ます。問題は、追加の認証手順中に_csrf
トークンが変更されることです。ドキュメントには、それがパラメーター_csrf
として使用されることがstate
示されています。これは、新しい値state
を反映するために、おそらく認可サーバーによって値を更新する必要が_csrf
あることを意味します。
**「状態」の生成方法:**
問題は、クライアント アプリが「OAuth2ClientAuthenticationProcessingFilter」を使用して認証サーバーが使用する情報を転送し、上記の認証手順でユーザーを認証する 前に、「状態」のエンコードおよび暗号化された値がクライアント アプリによって既に設定されていることです。一部の調査では、「state」キーは「DefaultStateKeyGenerator」を使用してクライアントによって生成され、次に「RandomValueStringGenrator」を使用して 6 文字の状態値を生成することが示されています。
たとえば、 に対して行われた元のリクエストで/oauth/authorize?(list of params)
_csrf
fupS1L
は、次の URL に示すように、生の値が にエンコードされます。
/oauth/authorize?client_id=acme&redirect_uri=http://localhost:8080/login&response_type=code&state=fupS1L
リダイレクト フロー中に_csrf
値が に変更された場合、状態パラメーターの値は無効になり、結果のトークンは保護されたリソースへのアクセスを許可するように承認されません。a69fd23a-a393-4b27-a685-a323fd31db9a
fupS1L
新しい値を、関数パラメーターに渡すことができるのと_csrf
同様の暗号化された値に変換するために、どの特定の構文を使用しますか?fupS1L
state
また、state
変数と_csrf
トークンの間に関係はありますか? RandomValueStringGenerator
used byDefaultStateKeyGenerator
は、ランダムな 6 文字の文字列を作成するだけのようです。コードを深く扱った、またはコードを書いた人からの信頼できる回答が欲しいです。私はコードの詳細なレビューを行っているため、RandomValueStringGenerator
ソース コードを読んで、状態はトークンに関連していないと言うカジュアルな通行人はcsrf
、何の価値も追加しないでしょう。ただし、API の作成者は、これがどのように機能するかを教えてくれるので、私たちを大いに助けてくれます。
**春への注意:**
このような単純なことのドキュメントを見つけるために、これほど掘り下げる必要はないはずです。