【问题标题】:Angular 4 Odata (ASP.net) Windows Authentication on ChromeChrome 上的 Angular 4 Odata (ASP.net) Windows 身份验证
【发布时间】:2017-07-06 17:14:51
【问题描述】:

我有一个调用 OData API 的 Angular 4 服务。我的 API 设置可以使用 Windows 身份验证,这可以通过 IE(版本 11)工作,但不适用于 Chrome,它会抛出:

加载资源失败:服务器响应状态为 401(未授权)

接下来是:

XMLHttpRequest 无法加载 http://gbldnrgaptest1:53219/User。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://gap' 不允许访问。响应的 HTTP 状态代码为 401。

我使用以下方法为每个发送的请求创建选项:

private GetOptions(): RequestOptionsArgs{
    let options : RequestOptionsArgs;
    options = {
        headers : this.GetHeaders(),
        withCredentials: true
    };

    return options;
}

private GetHeaders(): Headers {
    let headers = new Headers();
    headers.append("OData-Version","4.0");
    headers.append("Content-Type","application/json;odata.metadata=minimal");
    headers.append("Accept","application/json");
    return headers;
}

在我的 API 上,我启用了 CORS:

var cors = new EnableCorsAttribute(origins: "*", headers: "*", methods: "*", exposedHeaders: "*")
    {
        SupportsCredentials = true
    };
    config.EnableCors(cors);       

我还在 web.config 中启用了 Windows 身份验证:

<system.web>
  <compilation debug="true" targetFramework="4.5" />
  <httpRuntime targetFramework="4.5" />
  <authentication mode="Windows"></authentication>
</system.web>

我的 IIS 也设置为只允许 Windows 身份验证:

有人知道我可能会错过什么吗?

我觉得这是一个标题问题;就像我在 Chrome 中简单地运行 get 请求一样,例如通过导航到http://gbldnrgaptest1:53219/User,它返回就好了,一旦我添加了 NTLM 身份验证,SOAP UI 也可以工作。

【问题讨论】:

标签: angular windows-authentication angular-http angular-http-auth


【解决方案1】:

让它工作,我必须执行以下操作:

将以下内容添加到 Web.Config:

<authorization>
  <allow verbs="OPTIONS" users="*"/>
  <deny users="?" />
</authorization>

这是因为发出的飞行前请求显然没有发送凭据,这是导致错误发生的原因。 既然设置了上述规则,匿名身份验证需要重新开启;然后,Web.Config 中设置的规则将过滤通过的内容,只允许匿名完成 OPTIONS 请求。

【讨论】:

    猜你喜欢
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多