如何在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。