【问题标题】:AngularJS WebApi Authorization header does not appear to be getting passedAngularJS WebApi 授权标头似乎没有通过
【发布时间】:2015-04-29 07:14:14
【问题描述】:

我正在尝试使用 AngularJS v1.3.15 创建对 ASP.NET WebAPI(来自 Nuget 的最新版本)的调用,以获取客户列表。我可以成功进行身份验证并取回令牌。我将令牌添加到身份验证标头,但是当我拨打电话时,它会被踢回来,说身份验证标头丢失。

我得到令牌后的 Angular 调用如下所示

$scope.baseUrl = "http://localhost:7800/";    
$http({
  method: 'GET',
  url: $scope.baseUrl + 'customer',
    headers: {
      'Authorization': $scope.token
    }})

我也尝试过使用 angularjs $resource

return $resource($scope.baseUrl + 'customer', { }, { 'get': { method: 'GET', isArray: true, headers: { 'Authorization': $scope.token } } });

在 WebApiConfig 注册方法中,我有以下设置

var cors = new EnableCorsAttribute("*","*","*");
config.EnableCors(cors);

在 DelegatingHandler 中,我像这样检查 Authorization 标头

var authHeader = request.Headers.Authorization;

在 Angular 应用程序中,它始终为 null。如果我从 Fiddler 和 PostMan 进行检查,我会得到 Authorization 标头。

当我在 Chrome 中按 F12 并查看请求标头时,这些是结果

OPTIONS /customer HTTP/1.1
Host: localhost:7800
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost:63342
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2376.0 Safari/537.36
Access-Control-Request-Headers: accept, authorization
Accept: */*
Referer: http://localhost:63342/Test/index.html
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

【问题讨论】:

  • 当您在浏览器中按 F12 并单击网络选项卡时,请求是否显示预期的标头?
  • 不,它不存在,更新的问题是 chrome 请求标头
  • 所以你知道问题出在客户端。现在搜索 $http 拦截器,您会发现数百个示例,说明如何将身份验证标头添加到您的请求中。看起来你有一些 CORS(跨源请求)正在进行,所以你也可能在那里遇到问题。但第一步是发送标头。

标签: angularjs asp.net-web-api


【解决方案1】:

修复了我的问题,经过一些搜索后,我发现 OPTIONS 似乎不支持开箱即用。我发现如果我添加 NuGet 包 Microsoft.Owin.Cors 然后添加

app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 

到 startup.cs 文件

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多