AspNet核心身份,如何设置options.Cookie.SameSite?

时间:2018-01-01 17:59:18

标签: c# asp.net-core asp.net-identity

在最新的模板和库中使用了httpsonly标志。我怎么能把它关掉?

同样的问题已经过时,并且没有完整的配置示例:

AspNet Core Identity - cookie not getting set in production

3 个答案:

答案 0 :(得分:6)

为了在使用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身份验证选项。

答案 1 :(得分:6)

@poke的回答没有帮助我将值设置为SameSiteMode.None,至少没有在ASP.NET core 2.1中设置。

您在配置应用程序Cookie中设置的任何值都会被cookie policy middlewareMinimumSameSitePolicy设置覆盖。

这可以防止覆盖,请将MinimumSameSitePolicy扩展名的UseCookiePolicy设置为SameSiteMode.None

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

然后在ConfigureServices方法的AddCookie扩展名中设置实际的相同站点值

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
    options => options.Cookie.SameSite = SameSiteMode.None;
});

答案 2 :(得分:0)

对于我在asp.net core 3.1中的情况,结合了两件事就可以了

services.ConfigureApplicationCookie(options =>
        {
            options.Cookie.SameSite = SameSiteMode.Unspecified;
        });

        services.AddAntiforgery(opts => {
            opts.Cookie.SameSite = SameSiteMode.Unspecified;
        });