所以我开发了一个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允许来自任何域的任何请求。
答案 0 :(得分:3)
CORS只是关于 ajax请求从域A到域B的网页.Postman是一个开发工具而不是网页,它不关心CORS,这就是你的邮递员请求的原因没有被阻止。它与构建向您的api发出http请求的控制台应用程序相同,即请求不会被阻止。 对于角度客户端,您的请求不会被阻止,因为您允许http://localhost:3000和http://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。