Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET Core 2.1网站上启用HttpOnly Cookie_C#_Asp.net Core_.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 如何在ASP.NET Core 2.1网站上启用HttpOnly Cookie

C# 如何在ASP.NET Core 2.1网站上启用HttpOnly Cookie,c#,asp.net-core,.net-core,asp.net-core-mvc,C#,Asp.net Core,.net Core,Asp.net Core Mvc,我在VisualStudio中使用File->New Project创建了一个标准的ASP.NET Core MVC网站,其核心版本为2.1 在Startup.cs中是样板代码 public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // Th

我在VisualStudio中使用File->New Project创建了一个标准的ASP.NET Core MVC网站,其核心版本为2.1

在Startup.cs中是样板代码

 public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });


        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
public void配置服务(IServiceCollection服务)
{
配置(选项=>
{
//此lambda确定给定请求是否需要非必要cookie的用户同意。
options.checkApprovered=context=>true;
options.MinimumSameSitePolicy=SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
//此方法由运行时调用。使用此方法配置HTTP请求管道。
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseExceptionHandler(“/Home/Error”);
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc(路由=>
{
routes.MapRoute(
名称:“默认”,
模板:“{controller=Home}/{action=Index}/{id?}”);
});
}
当我浏览网站时,当我接受cookiepolicy时,会有一个.AspNet.approvement cookie。默认情况下,它被标记为安全的,但不只是httponly

如何仅在所有Cookie上启用HttpOnly


谢谢。

同意cookie不仅仅是因为它是通过JavaScript在客户端设置的。您可以在
\u CookieConsentPartial.cshtml
中找到代码:

<script>
    (function () {
        var button = document.querySelector("#cookieConsent button[data-cookie-string]");
        button.addEventListener("click", function (event) {
            document.cookie = button.dataset.cookieString;
        }, false);
    })();
</script>

(功能(){
var按钮=document.querySelector(“#cookieConsent按钮[数据cookie字符串]”;
按钮。addEventListener(“单击”),函数(事件){
document.cookie=button.dataset.cookieString;
},假);
})();
如果您需要一个HttpOnly cookie,您应该自己在中间件或控制器中实现同意逻辑,并使用常规表单(例如POST请求)。

您尝试过这个吗

services.ConfigureApplicationCookie(options =>
{
    // Cookie settings
    options.Cookie.HttpOnly = true;
    options.ExpireTimeSpan = TimeSpan.FromMinutes(10);

});

手动设置cookie时(例如,针对HTTPContext),有一个简单的CookieOptions对象,您可以使用它将HttpOnly设置为true。它最终看起来有点像这样:

HttpContext.Response.Cookies.Append(
"CookieKey",
"CookieValue",
new CookieOptions
{
    HttpOnly = true
});
微软有一个使用cookies进行身份验证的中间件。如果要在应用程序中使用它,请将其添加到startup.cs的Configure方法中

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseMvc();
    app.UseCookieAuthentication();
}

如果以这种方式使用CookieAuthentication,则默认情况下将使用。有关更多详细信息,请参阅

谢谢,我已经阅读了该网站,但没有得到任何有用的建议。我认为这是最好的答案。似乎唯一的方法是连接到微软的cookie中间件,并在他们的cookie上设置HttpOnly。这不是对所问问题的最佳答案,但它是用“同意”cookie解决特定问题的最佳方法,就像最近在Chrome 80上发生的那样。