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 未按预期工作

ASP.net如何得到SCOPE_IDENTITY()?

AspNet Identity Core - 登录时的自定义声明

将 Microsoft.AspNet.Identity 升级到 rc1 后找不到 IdentityStoreManager

如何撤销存储在 Identity Server 数据库中的 asp net core 中的刷新令牌

如何更改 Microsoft.AspNet.Identity.EntityFramework.IdentityUser 中的 id 类型