web api:具有两次授权的请求 headers 以 none 结束
web api: request with two authorization headers ends up with none
所以我做了一个测试,看看当我从邮递员向我的 api 发出请求时会发生什么,有两个授权 headers(基本方案和不记名方案)。我创建了一个授权过滤器属性:
public class RestrictAccessToAssignedManagers : System.Web.Http.Filters.AuthorizationFilterAttribute
{
public override bool AllowMultiple
{
get { return false; }
}
public override void OnAuthorization(HttpActionContext actionContext)
{
//Perform your logic here
base.OnAuthorization(actionContext);
}
}
并将此属性分配给我的控制器。
问题是,当我同时使用这两种授权时,在我的授权过滤器中,来自请求的授权 header 为空。
这是我向邮递员提出的要求:
这是提琴手的请求:
GET http://localhost:2328/api/values HTTP/1.1
Host: localhost:2328
Connection: keep-alive
Authorization: Basic aaa, Bearer bbb
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36
Postman-Token: 0f557417-d0b7-4ca9-7df7-1df1ea0049ad
Accept: */*
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8
我的问题是为什么同时使用两个授权 header 以 none 结束我的授权过滤器属性?
问题很可能是您检索 header 值的方式。使用您的 Fiddler 原始请求,我能够看到以下内容:
public override void OnAuthorization(HttpActionContext actionContext)
{
var authHeaders = actionContext.Request.Headers.GetValues("Authorization");
// authHeaders = ["Basic aaa, Bearer bbb"]
var authHeader = actionContext.Request.Headers.Authorization;
// authHeader = null
base.OnAuthorization(actionContext);
}
所以我做了一个测试,看看当我从邮递员向我的 api 发出请求时会发生什么,有两个授权 headers(基本方案和不记名方案)。我创建了一个授权过滤器属性:
public class RestrictAccessToAssignedManagers : System.Web.Http.Filters.AuthorizationFilterAttribute
{
public override bool AllowMultiple
{
get { return false; }
}
public override void OnAuthorization(HttpActionContext actionContext)
{
//Perform your logic here
base.OnAuthorization(actionContext);
}
}
并将此属性分配给我的控制器。
问题是,当我同时使用这两种授权时,在我的授权过滤器中,来自请求的授权 header 为空。
这是我向邮递员提出的要求:
这是提琴手的请求:
GET http://localhost:2328/api/values HTTP/1.1
Host: localhost:2328
Connection: keep-alive
Authorization: Basic aaa, Bearer bbb
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36
Postman-Token: 0f557417-d0b7-4ca9-7df7-1df1ea0049ad
Accept: */*
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8
我的问题是为什么同时使用两个授权 header 以 none 结束我的授权过滤器属性?
问题很可能是您检索 header 值的方式。使用您的 Fiddler 原始请求,我能够看到以下内容:
public override void OnAuthorization(HttpActionContext actionContext)
{
var authHeaders = actionContext.Request.Headers.GetValues("Authorization");
// authHeaders = ["Basic aaa, Bearer bbb"]
var authHeader = actionContext.Request.Headers.Authorization;
// authHeader = null
base.OnAuthorization(actionContext);
}