我有一个调用 OData API 的 Angular 4 服务。我的 API 设置可以使用 Windows 身份验证,这可以通过 IE(版本 11)工作,但不适用于 Chrome,它会抛出:
加载资源失败:服务器响应状态为 401(未授权)
紧随其后的是:
XMLHttpRequest 无法加载http://gbldnrgaptest1:53219/User。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-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 Auth:
有人知道我可能会错过什么吗?
我觉得这是一个标题问题;当我在 Chrome 中简单地运行一个获取请求时,例如通过导航到http://gbldnrgaptest1:53219/User
它返回就好了,一旦我添加了 NTLM 身份验证,SOAP UI 也可以工作。