【发布时间】:2017-08-08 15:34:21
【问题描述】:
我有一个简单的 API (Web Api 2),我尝试在其中熟悉 Bearer 身份验证。
我可以确认令牌端点正在使用 Postman 和简单的 ajax 调用:
$.ajax({
url: "http://localhost:51802/token",
type: "POST",
contentType: "application/x-www-form-urlencoded",
data: {
grant_type: "password",
userName: "foo",
password: "password123"
}
}).done(function(data) {
console.log(data);
}).fail(function(err) {
console.log(err);
});
客户端是一个相当简单的淘汰应用程序,它使用 npm http-server 运行,因此我需要在我的 API 上启用 CORS 来进行这些调用。但是,我尝试的所有方法似乎都没有任何效果(意味着不存在 CORS 标头):
//1
public static void Register(HttpConfiguration config)
{
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
/*remaining out of the box configuration*/
}
//2
public void ConfigureAuth(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
/*remaining out of the box configuration*/
}
在运行节点 http-server 的 Web 应用程序中使用与上述相同的 javascript 调用总是会导致 2 个错误:
- 加载资源失败:服务器响应状态为 400 (Bad Request) (
{"error":"unsupported_grant_type"}) - XMLHttpRequest 无法加载 http://localhost:51802/token。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://localhost:8080' 不允许访问。响应的 HTTP 状态代码为 400。
检查 Postman 中的标题,我找不到任何与 CORS 相关的条目:
Cache-Control →no-cache
Content-Length →641
Content-Type →application/json;charset=UTF-8
Date →Fri, 17 Mar 2017 06:58:54 GMT
Expires →-1
Pragma →no-cache
Server →Microsoft-IIS/10.0
Set-Cookie →.AspNet.Cookies=CiveOcfPNVqn_sVcJSQdi7VuqcleAd_Z9TD5Fff5m3lI3oZ3uVmThZHClXIAgwqByGoOlhfaCSHM8SwQ_GylajAnPdb0Ta6jmSl-M-CDnNYGdghibUWzSn_6-wgnNov_FGjkX8DSFoFvIYshFuppzbauS8MvUQkiDGVQg5pOvplaqcjD00SnsQMYssd5XQJGtb4NE35rOiF0Uk6hE45QxjAIUaq9LGVy; path=/; HttpOnly
X-Powered-By →ASP.NET
X-SourceFiles →=?UTF-8?B?QzpcUHJvamVrdGVcWWFpYlxZYWliLkFwaVxUb2tlbg==?=
我很确定我的 API 或客户端缺少一些非常基本的配置,但我不知道它是什么。
【问题讨论】:
标签: javascript c# cors asp.net-web-api2