6

Spring OAuth2stateのトークンに関連するパラメーターは具体的にどの程度ですか? _csrfstateの暗号化されたバージョン_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)_csrffupS1Lは、次の URL に示すように、生の値が にエンコードされます。

/oauth/authorize?client_id=acme&redirect_uri=http://localhost:8080/login&response_type=code&state=fupS1L

リダイレクト フロー中に_csrf値が に変更された場合、状態パラメーターの値は無効になり、結果のトークンは保護されたリソースへのアクセスを許可するように承認されません。a69fd23a-a393-4b27-a685-a323fd31db9afupS1L

新しい値を、関数パラメーターに渡すことができるのと_csrf同様の暗号化された値に変換するために、どの特定の構文を使用しますか?fupS1Lstate

また、state変数と_csrfトークンの間に関係はありますか? RandomValueStringGeneratorused byDefaultStateKeyGeneratorは、ランダムな 6 文字の文字列を作成するだけのようです。コードを深く扱った、またはコードを書いた人からの信頼できる回答が欲しいです。私はコードの詳細なレビューを行っているため、RandomValueStringGeneratorソース コードを読んで、状態はトークンに関連していないと言うカジュアルな通行人はcsrf、何の価値も追加しないでしょう。ただし、API の作成者は、これがどのように機能するかを教えてくれるので、私たちを大いに助けてくれます。


**春への注意:**
このような単純なことのドキュメントを見つけるために、これほど掘り下げる必要はないはずです。
4

1 に答える 1