从app.example.com到localhost的HTTP POST:会话cookie未发送。

问题描述 投票:0回答:1

我有两个一起工作的Spring Web应用程序。我从IDE在localhost上运行第一个应用程序,而第二个应用程序在app.127.0.0.1.nip.io的docker中运行。

这两个应用程序通过用户浏览器间接交互,在两个应用程序之间进行重定向和POSTing。这与SAML2中SP和IdP的工作方式略有相似。

在我的案例中,本地主机上的第一个应用程序正在向第二个应用程序发送一个302。在做了一些工作之后,第二个应用程序发送了一个HTML页面,其中有一个表单和JS代码来自动提交它,回到我在localhost上的第一个应用程序。HTML看起来类似于这样。

<form method=POST action="http://localhost:8080/some/path">
...
</form>

我的第一个应用程序使用Spring Session和会话cookie,工作正常。然而,当第二个应用程序让浏览器POST表单时,浏览器却发现 通过POST请求发送会话cookie。

当两个应用程序都在.127.0.0.1.nip.io下的docker中运行时,cookie被发送。

我试图找到任何提示,如果这种行为是预期的,以及应用程序可以使用什么头文件或其他位来影响这一点。

在这一点上,这主要是调试时的一个烦恼,但我担心一旦这两个应用程序将在不同的FQDN和不同的域上运行,浏览器也会阻止cookie的发送。

我已经用当前版本的Chrome和Firefox进行了测试。

http spring-mvc cookies spring-session
1个回答
0
投票

问题在于新的SameSite cookie策略正是涵盖了这种情况:另一个应用程序通过HTTP向主机POSTing。现在的默认值是 SameSite: lax,它不允许在此请求中发送第一方cookie值。

解决办法是允许发送会话cookie,方法是通过指定 SameSite: none. 但是要注意,这可能会造成安全漏洞。对于我的应用程序来说,这不是一个问题,所以我可以允许总是发送cookie,尤其是当我在调试器中运行我的应用程序时。

对于生产部署,我将能够收紧这一点,因为两个应用程序将在同一域名下运行(a.example.com和b.example.com),并且都将使用TLS,所以我可以将会话cookie设置为 SameSite: lax.

这里有一个不错的解释。https:/web.devsamesite-cookies-explained。

© www.soinside.com 2019 - 2024. All rights reserved.