Cookie 和 ASP.NET 核心

Cookies and ASP.NET Core

这可能是一个简单的问题,我希望至少是这样。

我已经开始研究 ASP.NET Core 的候选版本,我可以看到很多配置已从旧的 web.config 文件中移出并移至 JSON 结构化文件(以及 XML 和您可能想自己编写的任何其他中间件)。
我还没有弄清楚如何做的一件事是在旧的 web.config 方法中非常简单,保护您网站的一些基本组件,如 cookie。

以前我们会在 web.config 中设置 securehttpOnly 等等,当涉及到部署时,一个漂亮的小转换文件会为我们修改值并吐出最后输出新文件。读了一圈之后,似乎 web.config 现在几乎已经死了,那么我们如何才能达到相同的结果呢?

我知道我们可以根据某些变量(例如环境)是否设置为 DEV、STAGING、PRODUCTION 等来加载不同的配置文件,但这似乎只是用一种对所有意图都适用的转换来替换转换和目的,除了它是如何加载的?

我是不是漏掉了什么,还是把自己搞得一团糟?

好的,明白了,看来我仍然需要提醒自己,.NET5 中的大部分内容现在都可以选择加入,包括像 Session 这样的东西,它现在是 cookie 所在的地方,阅读 docs,我最终找到了启用 cookie 和配置它们所需的内容。

对于在您的应用程序中手动创建的通用 cookie,您在创建它时控制安全标志 - 例如:

Response.Cookies.Append(
    "COOKIE_NAME",
    "COOKIE_VALUE",
    new CookieOptions()
    {
        Path = "/",
        HttpOnly = false,
        Secure = false
    }
);

在这里,将 HttpOnly 设置为 true 将阻止客户端 JS 访问 cookie vlaue,将 Secure 设置为 true 将仅允许 cookie served/received 通过 HTTPS。

将 cookie 添加到响应时没有应用默认值,如 the source code for the ResponseCookies class 中所示。

对于创建和使用自己的 cookie 的各种中间件(例如您在回答中提到的 Session 中间件),它们可能有自己的配置选项来控制它们自己创建的那些 cookie 的这些标志,但是这对您在应用程序其他地方创建的 cookie 没有影响。

这是一个老问题,但我在任何地方都没有看到这个答案,所以这里开始。

至于全局配置 cookie 的行为,您可以在启动中进行。

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
        options.HttpOnly = HttpOnlyPolicy.Always;
        options.Secure = CookieSecurePolicy.Always;
        // you can add more options here and they will be applied to all cookies (middleware and manually created cookies)
    });

    ...
}

至于以每个环境具有不同配置的方式执行此操作,我仍然没有找到自己执行此操作的方法。