【发布时间】:2017-06-14 11:50:05
【问题描述】:
我有几个 Web API 端点没有身份验证/授权,因为它也可以用于访客用户。这些端点将直接通过XHR/Ajax/JS 使用。但是,我想只允许来自几个来源的请求。为此,我使用了Cors 中间件,如下所示:
ConfigureServices 方法
services.AddCors(options =>
{
options.AddPolicy("AllowSpecific", builder =>
builder.WithOrigins("http://localhost:55476")
.AllowAnyHeader()
.AllowAnyMethod());
});
配置方法
app.UseCors("AllowSpecific");
此限制适用于来自浏览器的请求。但是,如果请求来自Postman、Fiddler等Http客户端,则请求通过。
有没有办法解决这种情况?
【问题讨论】:
-
身份验证或网络隔离。使呼叫者必须知道只有他们才能知道的事情,或者他们必须在物理上位于某个网络中才能拨打电话。或两者。在应用程序上或单独设置 IdentityServer 是一种选择。
-
@juunas 我真的不能使用身份验证/授权,因为它也必须对访客用户(B2C 环境)开放。如果 API 调用是从另一个服务器/mvc 控制器进行的,则可以使用 IP 地址进行限制。但是,请求将通过 Xhr/Ajax 直接来自 JS。
-
添加一些身份验证
-
添加基于承载令牌的身份验证(Jwt)
-
如果您不能通过 IP 地址或添加身份验证进行限制,那么可悲的是,您唯一能做的就是 CORS。这可以防止网络浏览器从您不想要的域进行调用。但显然不会阻止以其他方式拨打的电话,因为 CORS 是一种君子协议。因此,您的 API 是公开的,无法阻止流量。例如,如果您担心有人拨打太多电话,那么您需要 rate 限制。
标签: asp.net-core asp.net-core-webapi