CookiePolicyOptions 还是 CookieAuthenticationOptions?

RHa*_*ris 5 authentication cookies startup asp.net-core asp.net-core-middleware

我刚刚开始思考一些 .NetCore Identity 的问题。然而,有一些事情我仍然有点困惑。在一些例子中我见过这样的事情:

services.AddAuthentication("mycookie")
 .AddCookie("mycookie", options => 
  {
     options.Cookie.HttpOnly = true,
     ...
  });

services.Configure<CookiePolicyOptions>(options => 
{
   options.HttpOnly = true;
   ...
});
Run Code Online (Sandbox Code Playgroud)

是否CookiePolicyOptions配置默认值并覆盖该特定 cookie 的默认值CookieAuthorizationOptionsAddCookie

services.Configure<CookiePolicyOptions>另外,如果Configure中没有添加Cookie Middleware的话,上例中的CookiePolicy配置还有作用吗?(IE app.UseCookiePolicy();

最后,如果您设置 Cookie 身份验证方案(如代码片段所示),是否需要 和 app.UseCookiePolicy()中间件app.UseAuthentication()

Cod*_*ter 1

CookiePolicyOptionsCookie 策略中间件的一部分:

使用提供给 Cookie 策略中间件的 CookiePolicyOptions 来控制 cookie 处理的全局特征,并在附加或删除 cookie 时挂钩到 cookie 处理处理程序。

services.Configure<CookiePolicyOptions>()其本身不做任何事情。这些CookiePolicyOptions选项仅CookiePolicyMiddleware在您使用时注入的内被询问app.UseCookiePolicy()

与几乎所有 ASP.NET Core DI 一样,您可以通过两种方式指定选项:

  1. 使用允许指定选项的重载:

    app.UseCookiePolicy(new CookiePolicyOptions { HttpOnly = true, ... })

  2. 使用调用Configure<TOptions>

    services.Configure<CookiePolicyOptions>(options => { options.HttpOnly = true; ... });

在策略选项中,您可以设置最小 SameSite 模式,以及应用程序发出的 cookie 是否应该是安全的和/或 HttpOnly,并在需要同意时配置一些回调,等等。

中间件会将该策略应用于您的应用程序设置的所有 cookie,因此可能会覆盖您为身份验证 cookie 配置的内容。

另请参阅上面链接的文档

根据下面的矩阵,的 Cookie 策略中间件设置MinimumSameSitePolicy可以影响设置中的设置Cookie.SameSiteCookieAuthenticationOptions

最小同站点策略 Cookie.SameSite 结果 Cookie.SameSite 设置
SameSiteMode.None SameSiteMode.None
SameSiteMode.Lax
SameSiteMode.Strict
SameSiteMode.None
SameSiteMode.Lax
SameSiteMode.Strict
SameSiteMode.Lax SameSiteMode.None
SameSiteMode.Lax
SameSiteMode.Strict
SameSiteMode.Lax
SameSiteMode.Lax
SameSiteMode.Strict
SameSiteMode.Strict SameSiteMode.None
SameSiteMode.Lax
SameSiteMode.Strict
SameSiteMode.Strict
SameSiteMode.Strict
SameSiteMode.Strict