2013-05-14 98 views
1

我需要更改我的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無法使用)

回答

1

說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。

相關問題