3

我正在尝试针对我在 Visual Studio 2015 中实现的 AspNetCore WebApi 项目在 Angular 2 RC6 应用程序中实现基于简单令牌的身份验证。

我已将示例应用程序放在 github 上:https ://github.com/tonywr71/Snazzle ,这是一个功能齐全的应用程序。

在应用程序中,我单击登录菜单项,输入登录名和密码信息,然后单击登录。

它成功返回了身份验证令牌,我将其存储在隔离存储中。

然后我单击 Fetch Data 菜单项,它调用一个具有 Authorize 属性的示例控制器。它传递令牌,该令牌从隔离存储中检索并添加到标头中。但它失败并出现错误。

我得到的错误是“XMLHttpRequest 无法加载http://localhost:5100/api/SampleData/WeatherForecasts。预检响应具有无效的 HTTP 状态代码 401”

WeatherForecasts 是一个 WebApi 方法,它返回一些 Angular 2 客户端组件使用的 json。

401 是未经授权的,它获得未经授权的原因是由于预检 ORIGIN 调用,因为没有为 ORIGIN 调用发送标头。

当我使用 Postman 运行它时,添加令牌后就没有问题了 - 方法调用有效。那是因为 Postman 不需要担心 CORS。

所以我的问题是,我怎样才能让 AspNetCore 不检查 ORIGIN 调用以进行身份​​验证?或者,如果这不是正确的方法,我应该如何实现这一目标?我应该添加一些中间件吗?

4

2 回答 2

5

您必须在 web api 端启用 CORS。

要在 web api 端启用 CORS,您必须执行以下步骤 -

首先,在 project.json 中添加依赖项 -"Microsoft.AspNetCore.Cors": "1.0.0",

然后像这样在startup.cs中启用CORS-

app.UseCors(builder => {
    builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
});

如果你想限制到特定的来源,那么你可以这样做 -

 app.UseCors(builder => builder.WithOrigins("example.com"));

您可以在此处找到有关 CORS 的更多信息

看看这是否有帮助。

于 2016-09-10T07:25:52.173 回答
0

这帮助了我:

转到Startup.cs文件

ConfigureServices(IServiceCollection services)在您的函数中添加以下内容

 services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());
        });

这在你的Configure(IApplicationBuilder app)功能中:

 app.UseCors("CorsPolicy");
于 2017-09-24T09:24:45.310 回答