Spring OAuth2 中与令牌state
相关的参数具体如何?_csrf
是我们期望state
的加密版本吗?_csrf
_csrf
此外,在将新值封装到state
Spring OAuth2 中的新参数之前,应该使用什么特定的 Java 语法来编码和加密它?
**上下文:**
客户端应用程序将用户的 Web 浏览器从客户端应用程序重定向到授权服务器的 authserver/login 页面。然后,在授权服务器应用程序中,使用 的自定义实现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
值更改为,则 state 参数中的值将不再有效,并且生成的令牌将无权允许访问受保护的资源。a69fd23a-a393-4b27-a685-a323fd31db9a
fupS1L
为了将新_csrf
值转换为类似于fupS1L
可以传递给功能state
参数的加密值,我使用什么特定语法?
state
另外,变量和_csrf
令牌之间有什么关系吗?使用的RandomValueStringGenerator
byDefaultStateKeyGenerator
似乎只是创建了一个随机的 6 个字符的字符串。我希望深入研究代码甚至编写代码的人给出权威的答案。我正在对代码进行深入审查,因此阅读RandomValueStringGenerator
源代码并说状态与csrf
令牌无关的偶然路人不会增加任何价值。然而,API 的作者会告诉我们它是如何工作的,从而为我们提供了很多帮助。
**注意春天:**
它不应该需要这么多的挖掘来找到这样一个简单事物的文档。