chg*_*chg 5 asp.net asp.net-mvc asp.net-core
我正在使用自定义授权机制,将当前用户会话存储在 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);
Run Code Online (Sandbox Code Playgroud)
重定向后检索cookie:
var cookieDataString = this._contextAccessor.HttpContext.Request.Cookies["SomeKey"];
Run Code Online (Sandbox Code Playgroud)
在cookieDataString始终null。
当我在同一个网站上时它工作正常,但是当我从另一个网站重定向回来时,它总是 null
更新 1:
经过一番研究,我发现这个问题可能会导致SameSite政策。发现这篇文章使用相同的站点 cookie 属性,该属性表示lax当您将POST方法发送到您的网站时,这不是您想要使用的内容。创建 cookie 我将 cookie 选项设置为SameSiteMode.None. 由于它不起作用,我发现您必须MinimumSameSitePolicy在启动中间件中进行设置。
app.UseCookiePolicy(
new CookiePolicyOptions()
{
MinimumSameSitePolicy = SameSiteMode.None
});
Run Code Online (Sandbox Code Playgroud)
删除旧cookie并创建新cookie后,它仍然使用lax策略创建它。
经过一些研究并尝试不同的测试用例后,我发现这确实是一个SameSite正在发挥作用的政策。主要问题是它不允许我设置SameSite = SameSiteMode.None,即使在我添加之后也是如此MinimumSitePolicy。
经过一段时间浏览文档后,我发现了这个通用数据保护条例(GDPR).net core 2.2
我所要做的就是添加这些行ConfigureServices():
services.Configure<CookiePolicyOptions>(options =>
{
options.MinimumSameSitePolicy = SameSiteMode.None;
});
Run Code Online (Sandbox Code Playgroud)
并添加app.UseCookiePolicy();进去Configure()。
经过这些修复之后,我终于Lax从 cookie 中删除了,并且在重定向之后,我终于从 cookie 中获得了一个值。
| 归档时间: |
|
| 查看次数: |
2034 次 |
| 最近记录: |