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);
}