asp.net - .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
策略创建它。
解决方案
经过一些研究并尝试了不同的测试用例,我发现这是真正的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 中获得了一个值。
推荐阅读
- android - 如何在没有操作栏菜单的情况下将徽标居中
- intellij-idea - Intellij idea 不在项目视图中显示文件夹
- xamarin - 如何在 Xamarin 表单中创建媒体下载器,例如 whats 应用程序、电报?以及如何创建whats app UI
- typescript - 打字稿:如何将通用字典类型传递给类,以便将空对象设置为默认值?
- scala - 如何针对可变和不可变 Map 进行编程?
- r - 计算数据框列中单元格之间的差异
- hbase - 从 hbase 1.2.5 中摆脱 Jetty 6
- excel - 数据透视表切片器未在未受保护的工作表中刷新
- node.js - Typescript 类型 HTTP 请求 Rest API
- video - 如何为 mp4 容器的视频流指定偏移量和查找位置?