锁定托管API以接收来自一个源的请求

时间:2017-06-30 08:37:36

标签: iis

我在IIS 8.5中托管了.net核心api api。 我想仅允许来自某个域的请求到达api。

我查看了IIS Rewrite模块,看到可以在那里设置规则。这是最好的方法吗?

1 个答案:

答案 0 :(得分:0)

您实际上会发现您的网页无论如何都无法直接与API通信。这是一种安全形式,因此页面上的javascript不能/不应该只能调用另一个域。

这称为Same-Origin策略,这意味着页面上的任何脚本只能将HttpRequests发送到同一个域。 Mozilla在这里解释得比我更好:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

所以你的问题实际上是,如何打开我的API来跨越原始调用,但仅限于我的特定域。 .net核心已经让你满意了!

首先安装以下Nuget包:

Install-Package Microsoft.AspNetCore.Cors

接下来,在startup.cs的ConfigureServices方法中,您需要添加CORS服务。

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();
}

现在您需要将CORS添加到管道中。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCors( options => options.WithOrigins("http://example.com").AllowAnyMethod() );

    app.UseMvc();
}

现在,您的API项目应允许跨域调用,但仅适用于您的域。当然,这并不能阻止人们手动调用您的API,但这意味着不受您控制的域上的恶意脚本无法使用户不知道调用。

更多信息:http://dotnetcoretutorials.com/2017/01/03/enabling-cors-asp-net-core/