2013-02-28 166 views
2

即时尝试为我的IIS承载的WebAPI服务实现基本的HTTP认证。我试图使用cookie来发送服务器和客户端之间的用户相关数据。当客户端是Firefox时,此代码似乎可以工作,但如果我使用IE或Chrome,则Cookie不会发回服务器。在HTTP基本认证中使用cookie的正确方法

我有以下几点。

林添加cookie来响应消息像这样...在HttpModule.AuthenticateRequest事件处理器...

HttpApplication app = sender as HttpApplication; 

HttpResponse response = app.Context.Response; 
HttpRequest request = app.Context.Request; 

HttpCookie c = new HttpCookie("MyCookie", "Hellou!"); 
c.Expires = DateTime.Now.AddDays(1); 
c.Domain = request.Url.Host; 
c.Path = "/"; 

response.Cookies.Add(c); 

...或在控制器POST操作:

CookieHeaderValue chv = new CookieHeaderValue("MyCookie", "Hellou"); 
chv.Expires = DateTime.Now.AddDays(1); 
chv.Domain = Request.RequestUri.Host; 
chv.Path = "/"; 

rmsg.Headers.AddCookies(new CookieHeaderValue[] { chv }); 

林阅读这样的饼干,在HttpModule.AuthenticateRequest事件处理程序

HttpApplication app = sender as HttpApplication; 
HttpRequest request = app.Context.Request; 

if (request.Cookies.Count > 0) 
{ 
    HttpCookie c = request.Cookies.Get("MyCookie"); 
    if (c != null) 
    { 
     // ... 
    } 
} 

为T他的cookie代码是否正确?有没有办法确保cookie可以在所有客户端上运行?

回答

2

基本认证的基本思想是,用户的用户名和密码由客户端在Authorization头部的每个请求中发送。设计API时不需要任何cookie。

如果您不想使用基本身份验证(因为需要在每个请求上发送用户名和密码),您可以使用令牌保护您的API。以一个例子来看看following article