.NET Core ASP CORS不限制Azure VM

时间:2017-09-15 06:36:08

标签: asp.net-core cors

所以我开发了一个asp .net核心API,它必须允许跨域访问。我已经能够完成所有设置和运行。我已经启用了CORS并希望它在我的所有端点上应用相同的设置,因此在我的Config方法中有以下内容:

app.UseCors(builder => builder.WithOrigins(
     "http://localhost:3000",
     "http://localhost:3001",
     "https://staging.example.com",
     "https://production.server.com")
     .AllowAnyMethod()
     .AllowAnyHeader()
     .AllowCredentials());

在我的ConfigureServices方法中:

services.AddCors();

代码在MVC中间件之前,当在本地运行时,我必须从localhost:3000发送请求,因为所有其他人都被拒绝/阻止(如预期的那样)。

此外,在暂存和实时应用程序正常工作,可以毫无问题地调用API。

但是,当部署到暂存或生产时,我可以使用Postman从我的本地计算机调用API,也可以将我的Web应用程序(AngularJS应用程序)的本地副本指向API。

也许我错过了什么或者我的理解是错的,但我认为这不应该被允许!如果不是,那么任何关于我可能出错的地方的想法?好像我的API允许来自任何域的任何请求。

1 个答案:

答案 0 :(得分:3)

CORS只是关于 ajax请求从域A到域B的网页.Postman是一个开发工具而不是网页,它不关心CORS,这就是你的邮递员请求的原因没有被阻止。它与构建向您的api发出http请求的控制台应用程序相同,即请求不会被阻止。 对于角度客户端,您的请求不会被阻止,因为您允许http://localhost:3000http://localhost:3001来源。如果您尝试使用来自http://localhost:3002的ajax调用,则应该阻止

这里的一个选项是提取config / json文件中的起源。例如,您将使用appsettings.Development.json:

{
  "cors": {
    "Origins": ["http://localhost:3000", "http://localhost:3001"]
  }
}

在生产(临时)环境中运行时,其他文件appsettings.Production(Staging).json。

如果您想完全保护您的其他API,您应该考虑添加JWT身份验证。例如,在游戏中添加Identity Server 4,或使用Azure B2C AD。但这意味着您还应该为Angular客户端添加Login。