首页 > 解决方案 > .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 属性,它表示当您接收到您的网站的方法时,这lax不是您想要使用的东西。POST创建 cookie 我将 cookie 选项设置为SameSiteMode.None. 由于它不起作用,我发现您必须MinimumSameSitePolicy在启动中间件中进行设置。

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

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

标签: asp.netasp.net-mvcasp.net-core

解决方案


经过一些研究并尝试了不同的测试用例,我发现这是真正的SameSite策略,它应该发挥作用。主要问题是它不允许我设置SameSite = SameSiteMode.None,即使我添加了MinimumSitePolicy.

浏览文档一段时间后,我发现了这个通用数据保护条例 (GDPR) .net core 2.2

我所要做的就是将这些行添加到ConfigureServices()

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

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

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


推荐阅读