如何在cookie中设置安全标志在asp.net web api

问题描述:

我需要更改我的web.api生成的所有cookie上的HttpOnly和Secure标志。如何在cookie中设置安全标志在asp.net web api

为此,我添加了一个全局过滤器,它修改了我web.api的每个响应。我已经有了使用PreSendRequestHeaders事件在IIS中执行此操作的代码,但这在自行托管时不起作用。

我需要更改的cookies是会话和表单验证cookie。 httponly标志不是主要问题,它是安全标志,是我们执行SSL卸载时的问题,因此它不会自动保护。

我可以使用HttpResponseHeadersExtensions添加cookie,但我看不到任何内容来更新现有的cookie。

我想避免手动解析set-cookie头。达到此目的的最佳方式是什么?

(这需要自我主机和IIS工作,所以HttpContext.Current无法使用)

说cookie将被由ApiController自己设定。它可以是任何成分,但要说控制器做它,就像这样:

public HttpResponseMessage Get(int id) 
{ 
    var cookie = new CookieHeaderValue("abc", "12345"); 
    cookie.Path = "/"; 

    var response = Request.CreateResponse(); 
    response.Headers.AddCookies(new CookieHeaderValue[] { cookie }); 
    return response; 
} 

再次,cookie可以是包括FormsAuth任何的cookie。但我只是使用普通的cookie。如果你有一个消息处理程序,你可以简单地创建一个仅Http和安全cookie使用相同的密钥,就像这样:

public class MyHandler : DelegatingHandler 
{ 
    protected override async Task<HttpResponseMessage> SendAsync(
            HttpRequestMessage request, 
              CancellationToken cancellationToken) 
    { 
     var response = await base.SendAsync(request, cancellationToken); 

     var cookie = new CookieHeaderValue("abc", "12345"); 
     cookie.Secure = true; 
     cookie.HttpOnly = true; 
     cookie.Path = "/"; 

     response.Headers.AddCookies(new CookieHeaderValue[] { cookie }); 

     return response; 
    } 
} 

从而发送回客户端cookie将是一个安全的HttpOnly的cookie。