Spring 如何使用RestTemplate传递CSRF令牌

Spring 如何使用RestTemplate传递CSRF令牌,spring,spring-boot,csrf,resttemplate,Spring,Spring Boot,Csrf,Resttemplate,我有两个Spring Boot REST应用程序。其中一个应用程序使用Springrestemplate调用另一个应用程序。让我们将这些应用程序称为服务器和客户端应用程序 服务器应用程序正在将XSRF-TOKENTOKEN作为cookie发送,这是为UI部分完成的。但是,服务器无法(据我所知)区分来自浏览器的请求和来自客户端应用的请求。因此,我不能有选择地将CSRF令牌仅从服务器发送到浏览器 Spring中是否有内置机制允许RestTemplate检测CSRF cookie/头并重播请求? 如果

我有两个Spring Boot REST应用程序。其中一个应用程序使用Spring
restemplate
调用另一个应用程序。让我们将这些应用程序称为服务器和客户端应用程序

服务器应用程序正在将
XSRF-TOKEN
TOKEN作为cookie发送,这是为UI部分完成的。但是,服务器无法(据我所知)区分来自浏览器的请求和来自客户端应用的请求。因此,我不能有选择地将
CSRF
令牌仅从服务器发送到浏览器

Spring中是否有内置机制允许RestTemplate检测CSRF cookie/头并重播请求?

如果没有,我如何手动执行相同操作?我是否应该等待CSRF异常发生,然后读取响应的cookie并重播它

如果只执行一次,那么就可以了,但是为每个
restemplate
调用等待异常似乎并不正确

我可能会尝试存储一次令牌,然后从下一次开始设置,但是它将如何处理多服务器应用程序场景(我必须在下一次实现)。由于一个服务器应用程序的
CSRF
令牌对另一个服务器应用程序无效,因此我无法存储单个令牌,但我必须存储一个令牌映射,其中每个新服务器应用程序URL都有一个条目

这一切似乎太复杂了,我宁愿让弹簧来处理它

如有任何线索,我们将不胜感激


感谢

现在我已经在服务器应用程序中实现了一个没有保护的REST服务,可以调用该服务来获取CSRF cookies。我必须始终允许创建会话,以便CSRF cookie不会在一个会话中更改,从而避免出现错误
无法验证提供的CSRF令牌,因为找不到您的会话

客户端应用程序调用CSRF rest服务来获取cookie,然后在下一次服务调用时发送cookie

通过
restemplate
为每个REST调用调用CSRF令牌服务似乎是一件非常困难的事情,但是它避免了我实现存储会话的复杂逻辑。CSRF令牌服务只提供cookies,因此它的网络呼叫与实际的服务呼叫相比不会花费太多时间

我还考虑使用持久性存储(SQL数据库或Redis)来存储服务器应用程序的CSRF令牌,然后让客户端应用程序直接从持久性存储中读取


但是,我不知道如何将
会话+服务器应用程序+CSRF令牌关联在一起,以识别客户端所需的令牌。由于客户端最初没有会话,因此无法从数据库中唯一地找到其令牌的CSRF令牌。由于
restemplate
不存储下一次调用的会话,此方法更加复杂。

目前,我在服务器应用程序中实现了一个不受保护的REST服务,可以调用该服务来获取CSRF cookie。我必须始终允许创建会话,以便CSRF cookie不会在一个会话中更改,从而避免出现错误
无法验证提供的CSRF令牌,因为找不到您的会话

客户端应用程序调用CSRF rest服务来获取cookie,然后在下一次服务调用时发送cookie

通过
restemplate
为每个REST调用调用CSRF令牌服务似乎是一件非常困难的事情,但是它避免了我实现存储会话的复杂逻辑。CSRF令牌服务只提供cookies,因此它的网络呼叫与实际的服务呼叫相比不会花费太多时间

我还考虑使用持久性存储(SQL数据库或Redis)来存储服务器应用程序的CSRF令牌,然后让客户端应用程序直接从持久性存储中读取

但是,我不知道如何将
会话+服务器应用程序+CSRF令牌关联在一起,以识别客户端所需的令牌。由于客户端最初没有会话,因此无法从数据库中唯一地找到其令牌的CSRF令牌。由于
restemplate
不存储下一次调用的会话,此方法变得更加复杂