相关疑难解决方法(0)

Web API 2.1 Windows身份验证CORS Firefox

这是场景:

我创建了一个web api项目和一个mvc项目,如下所示:

http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

我通过nuget安装了CORS支持并添加了EnableCorsAttribute

我运行了这个项目,一切都按照预期(GET,PUT和POST)在Chrome,IE和FireFox上运行.

然后我在web api项目中启用了Windows身份验证(是的,我真的需要在api项目中使用win auth).为了使这个工作,我将xhrFields arg添加到我的jquery.ajax调用:

        $.ajax({
            type: method,
            url: serviceUrl,
            data: JSON.stringify(foo),
            contentType: 'application/json; charset=UTF-8',
            xhrFields: {
                withCredentials: true
            }
        }).done(function (data) {
            $('#value1').text(data);
        }).error(function (jqXHR, textStatus, errorThrown) {
            $('#value1').text(jqXHR.responseText || textStatus);
        });
Run Code Online (Sandbox Code Playgroud)

另外,我设置了EnableCorsAttribute.SupportsCredentials属性= true

我测试了一切.Chrome和IE工作,FireFox没有.Firefox收到401响应它的预检(OPTIONS)请求.

似乎FireFox没有尝试使用该服务进行身份验证.

有没有人找到解决这个问题的方法?

asp.net firefox windows-authentication cors asp.net-web-api

10
推荐指数
1
解决办法
9265
查看次数

AngularJS withCredentials未发送

在AngularJS中,我在子域中使用了Restful API但是我遇到的问题是cookie /会话没有跨域共享.对于Angular,我这样做:

app.config(['$httpProvider',
function($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    $httpProvider.defaults.withCredentials = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);
Run Code Online (Sandbox Code Playgroud)

此外,当我用$ http发出请求时,我正在做

var object = {};

object.url = '/example'
object.withCredentials = true;

$http(object).success(object.success).error(object.error);
Run Code Online (Sandbox Code Playgroud)

在我的服务器端,我有:

if($_SERVER['REQUEST_METHOD']=='OPTIONS') {
    if(isset($_SERVER['HTTP_X_FOWARDED_HOST']) && !empty($_SERVER['HTTP_X_FOWARDED_HOST'])) {
        $origin=$_SERVER['HTTP_X_FOWARDED_HOST'];
    } else {
        $origin=$_SERVER['HTTP_ORIGIN'];
    }
    if(isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) && ($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='POST' || $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='DELETE' || $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']=='PUT')) {
        header('Access-Control-Allow-Origin: '.$origin);
        header('Access-Control-Allow-Credentials: true');
        header('Access-Control-Allow-Headers:  *,X-Requested-With,Content-Type');
        //header('Access-Control-Allow-Headers: Content-Type');
        header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT');
        // http://stackoverflow.com/a/7605119/578667
        header('Access-Control-Max-Age: 86400');
    }

}
Run Code Online (Sandbox Code Playgroud)

现在我看到服务器说它将允许凭据但不在选项请求中发送.截图如下.

在此输入图像描述 我究竟做错了什么?

javascript php ajax cors angularjs

5
推荐指数
1
解决办法
2万
查看次数

Angular 4 HTTP POST 与 Windows 身份验证预检问题

我在后端使用 Angular 4 和 ASP.NET Web api 2,并启用了 Windows 身份验证。我有一篇文章和一篇 get api。GET 工作正常。但对于 POST 我收到此错误

预检响应具有无效的 HTTP 状态代码 401

这意味着我收到 OPTIONS 方法的未经授权的错误,但我知道不应该出现这种情况,因为永远不会使用用户凭据调用 OPTIONS 方法。

在角度中我调用 api 如下

      let requestOptions = new RequestOptions({
      withCredentials: true,
      headers: new Headers({
        'content-type': 'application/json'
      })
    })
    this.http.post("someapiendpoint", JSON.stringify(data), requestOptions).subscribe(data => {
      debugger;
    });
Run Code Online (Sandbox Code Playgroud)

我已在 Web 配置中设置所有 CORS 标头,如下所示

        <add name="Access-Control-Expose-Headers " value="WWW-Authenticate"/>
        <add name="Access-Control-Allow-Origin" value="http://localhost:4200" />
        <add name="Access-Control-Allow-Headers" value="accept, authorization, Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
        <add name="Access-Control-Allow-Credentials" value="true" />
Run Code Online (Sandbox Code Playgroud)

我的 …

http windows-authentication cors preflight angular

5
推荐指数
1
解决办法
6684
查看次数