AspNet Core Identity,如何设置options.Cookie.SameSite?
Posted
技术标签:
【中文标题】AspNet Core Identity,如何设置options.Cookie.SameSite?【英文标题】:AspNet Core Identity, how set options.Cookie.SameSite? 【发布时间】:2018-06-11 15:04:10 【问题描述】:在最新的模板和库中使用了 httpsonly 标志。如何关闭它?
同样的问题已经过时,并且没有完整的配置示例:
AspNet Core Identity - cookie not getting set in production
【问题讨论】:
【参考方案1】:为了在使用 Identity 时配置应用程序 cookie,您可以在 Startup 的 ConfigureServices
中使用 ConfigureApplicationCookie
method:
// add identity
services.AddIdentity<ApplicationUser, IdentityRole>();
// configure the application cookie
services.ConfigureApplicationCookie(options =>
options.Cookie.SameSite = SameSiteMode.None;
);
由于 Identity 本质上在后台添加了 cookie 身份验证,因此配置操作与您在配置 cookie 身份验证时通常传递给 AddCookie()
的操作相同。只是因为AddIdentity()
负责为您设置身份验证,ConfigureApplicationCookie
提供了一种事后调整 cookie 身份验证选项的方法。
【讨论】:
这救了我的命 :)【参考方案2】:@poke 的回答并没有帮助我将值设置为SameSiteMode.None
,至少在 ASP.NET core 2.1 中没有。
您在配置应用程序 cookie 中设置的任何值都会被 cookie policy middleware 的 MinimumSameSitePolicy
设置覆盖。
为防止覆盖,请将UseCookiePolicy
扩展的MinimumSameSitePolicy
设置为SameSiteMode.None
。
app.UseCookiePolicy(new CookiePolicyOptions
MinimumSameSitePolicy = SameSiteMode.None
);
然后在ConfigureServices
方法的AddCookie扩展中设置实际相同的站点值
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
options => options.Cookie.SameSite = SameSiteMode.None;
);
【讨论】:
你为我节省了很多时间!【参考方案3】:对于我在 asp.net core 3.1 中的情况,两件事结合起来就可以了
services.ConfigureApplicationCookie(options =>
options.Cookie.SameSite = SameSiteMode.Unspecified;
);
services.AddAntiforgery(opts =>
opts.Cookie.SameSite = SameSiteMode.Unspecified;
);
【讨论】:
以上是关于AspNet Core Identity,如何设置options.Cookie.SameSite?的主要内容,如果未能解决你的问题,请参考以下文章
Aspnet Core 3.1 Identity ConfirmEmail 未按预期工作
AspNet Identity Core - 登录时的自定义声明
将 Microsoft.AspNet.Identity 升级到 rc1 后找不到 IdentityStoreManager
如何撤销存储在 Identity Server 数据库中的 asp net core 中的刷新令牌
如何更改 Microsoft.AspNet.Identity.EntityFramework.IdentityUser 中的 id 类型