.net core 2.1在从另一个位置重定向时,cookie值始终为空



我使用自定义授权机制,将当前用户会话存储在cookie中。每次有人访问网站时,ActionFilter就会启动,在那里它会验证cookie值和会话状态。

我遇到的问题是-我必须将一些数据POST发送到另一个网站(https://differentUrl.com)我传递网站的位置returnUrl(https://mywebsiteUrl.com)。不同的网站,在工作完成后,将POST响应发送回我的returnURL。发生这种情况后,我试图得到的cookie总是null

创建这样的cookie(这发生在登录时(:

private readonly IHttpContextAccessor _contextAccessor; //Injected via DI
...
var cookieOptions = new CookieOptions()
{
Expires = DateTime.Now.AddDays(10),
Secure = true,
HttpOnly = false,
SameSite = SameSiteMode.None //Still sets as Lax in browser
};
this._contextAccessor.HttpContext.Response.Cookies.Append("SomeKey", "myEncryptedCookieValue", cookieOptions);

重定向后检索cookie:

var cookieDataString = this._contextAccessor.HttpContext.Request.Cookies["SomeKey"];

cookieDataString始终是null

当我在同一个网站上时,它工作得很好,但当我从另一个网站重定向回来时,它总是null

更新1:

经过研究,我发现这个问题可能会导致SameSite策略。发现这篇文章使用相同的网站cookie属性,该属性表示当您的网站收到POST方法时,lax不是您想要使用的东西。创建cookie时,我将cookie选项设置为SameSiteMode.None。由于它不起作用,我发现您必须在启动中间件中设置MinimumSameSitePolicy

app.UseCookiePolicy(
new CookiePolicyOptions()
{
MinimumSameSitePolicy = SameSiteMode.None
});

删除旧cookie并创建新cookie后,它仍然使用lax策略创建它。

经过一些研究和处理不同的测试用例,我发现这确实是SameSite策略,它正在正常工作。主要的问题是它不允许我设置SameSite = SameSiteMode.None,即使在我添加了MinimumSitePolicy之后也是如此。

经过一段时间的浏览文档,我发现了这个通用数据保护条例(GDPR(.net核心2.2

我所要做的就是在ConfigureServices():中添加这些行

services.Configure<CookiePolicyOptions>(options =>
{
options.MinimumSameSitePolicy = SameSiteMode.None;
});

并在Configure()中添加app.UseCookiePolicy();

在这些修复之后,我最终从cookie中删除了Lax,在重定向之后,我终于从cookie中获得了一个值。

相关内容

  • 没有找到相关文章

最新更新