【问题标题】:web api: request with two authorization headers ends up with noneweb api:带有两个授权标头的请求最终没有
【发布时间】:2017-10-10 17:10:24
【问题描述】:

所以我做了一个测试,看看当我使用两个授权标头(方案基本和承载)从邮递员向我的 api 发出请求时会发生什么。我创建了一个授权过滤器属性:

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

并将这个属性分配给我的控制器。

问题是当我同时使用两种授权时,在我的授权过滤器中,请求的授权标头为空。

这是我向邮递员提出的要求:

这是提琴手的要求:

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

我的问题是为什么使用两个授权标头最终都没有授权过滤器属性?

【问题讨论】:

  • 框架很可能拒绝具有多个值的请求标头,因此不填充对象。您必须检查框架源代码才能确定。
  • 你能建议我上什么课吗?

标签: asp.net-web-api2 asp.net-authorization


【解决方案1】:

问题很可能是您检索标头值的方式。使用您的 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);
}

【讨论】:

  • 那么,到底我们是否有这个请求的授权标头?
  • 确实如此,但我认为这不是您所期望的。数组中只有一个标题,包括逗号在内的整个字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2017-08-07
  • 1970-01-01
  • 2021-03-24
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多