与{160}中state
令牌相关的_csrf
参数的具体内容是什么? state
是_csrf
的加密版本,因为我们会期待它吗?
此外,在将新的_csrf
值封装到Spring OAuth2中的新state
参数之前,应该使用哪种特定的Java语法对其进行编码和加密?
客户端应用程序将用户的Web浏览器从客户端应用程序重定向到授权服务器的authserver /登录页面。然后,在授权服务器应用程序中,OncePerRequestFilter
的自定义实现用于将请求重定向到/oauth/authorize?(list of params)
到其他身份验证步骤,这些步骤最终会重定向回/oauth/authorize?(list of params)
的新请求。问题是 _csrf
令牌在其他身份验证步骤和the documentation indicates that _csrf
is used as the state
parameter期间发生了变化。这意味着授权服务器可能需要更新 state
值以反映新的_csrf
值。
state
生成:
问题是客户端应用程序已经设置了state
的编码和加密值,然后客户端应用程序使用OAuth2ClientAuthenticationProcessingFilter
传输信息,以便在验证用户身份时使用身份验证服务器通过上述验证步骤。
某些研究表明,state
密钥是由客户端使用DefaultStateKeyGenerator
生成的,RandomValueStringGenrator
又使用RandomValueStringGenerator
生成6个字符的状态值。
例如,在向/oauth/authorize?(list of params)
发出的原始请求中,原始_csrf
值被编码为fupS1L
,如以下网址所示:< / p>
/oauth/authorize?client_id=acme&redirect_uri=http://localhost:8080/login&response_type=code&state=fupS1L
如果重定向流期间_csrf
值更改为a69fd23a-a393-4b27-a685-a323fd31db9a
,则state参数中fupS1L
的值将不再有效,并且生成的令牌将不会被授权允许访问受保护的资源。
我将使用哪种特定语法将新_csrf
值转换为类似于fupS1L
的加密值,该值可以传递到功能state
参数?< / strong>
此外,state
变量和_csrf
令牌之间是否存在任何关系? DefaultStateKeyGenerator
使用的RandomValueStringGenerator
似乎只是创建一个随机的6个字符串。我希望得到一位深深研究过代码甚至是编写代码的人的权威答案。我正在对代码进行深入审核,因此,阅读mysqli_connect
源代码并说状态与csrf
令牌无关的随意传递者不会添加任何值。然而,API的作者通过告诉我们它是如何工作的,将帮助我们所有人。
答案 0 :(得分:0)
我知道它被问到已经很老了。仍然共享我现在所知道的信息,因为我已经完成了类似的要求,以便在“状态”参数中传递深层链接。在成功的oauth登录会话后,当流从auth服务器返回时,我想重定向到此Deeplink。
我基本上遵循了这个SOF答案-> https://stackoverflow.com/a/52462787/5107365。这建议将DefaultStateKeyGenerator扩展为使用从请求到AAS的deeplink参数来加密+编码以设置为“ state”参数。并且,然后使用OAuth2ClientAuthenticationProcessingFilter.AuthenticationSuccessHandler的自定义实现来覆盖defineTargetUrl方法,以在成功通过身份验证后返回流时对状态参数进行解码/解密。希望它可以帮助需要类似要求的人。