首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用RestTemplate传递CSRF令牌

如何使用RestTemplate传递CSRF令牌
EN

Stack Overflow用户
提问于 2017-08-24 15:04:09
回答 1查看 2.7K关注 0票数 1

我有两个Spring应用程序。其中一个应用程序使用Spring RestTemplate调用其他应用程序。让我们调用这些应用服务器和客户端应用程序。

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

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

如果不是的话,我怎么能手动做同样的事情呢?我是否应该等待CSRF异常发生,然后从响应中读取cookie并重新播放它?

如果只执行一次,那么就可以了,但是等待每个RestTemplate调用的异常似乎是不对的。

我可能尝试存储一次令牌,并从下一次开始设置,但是它将如何处理多服务器应用场景(这是我必须实现的下一步)。由于一个服务器应用程序的CSRF令牌对另一个服务器应用程序无效,所以我无法存储单个令牌,但我必须存储一个令牌映射,它将为每个新的服务器应用程序URL提供一个条目。

这一切似乎太复杂了,我宁愿让Spring来处理。

任何线索都很感激。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-25 19:53:00

目前,我已经在服务器应用程序中实现了一个没有保护的REST服务,可以调用它来获取cookies。我必须始终允许创建会话,以便cookie不会在一个会话中更改,这样我就可以避免错误Could not verify the provided CSRF token because your session was not found

客户端应用程序调用CSRF服务来获取cookie,然后将其与下一个服务调用一起发送。

似乎可以通过RestTemplate为每个REST调用CSRF令牌服务,但是它可以帮助我避免实现存储会话的复杂逻辑。CSRF令牌服务只交付cookie,因此与实际的服务调用相比,它的网络调用不需要花费太多时间。

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

但是,我不知道如何将Session + Server app + CSRF token关联到一起来识别客户端所需的令牌。由于客户端最初没有会话,所以它无法从数据库中唯一地为它的令牌找到CSRF令牌。由于RestTemplate不为下一次调用存储会话,这个方法更加复杂。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45865005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档