如何以完美的方式使用cors

时间:2018-01-27 13:19:55

标签: .net asp.net-mvc cors cross-domain allow-same-origin

我正在尝试集成不同的技术(每个不同的域)并创建RESTfull操作。例如,我有一个客户端(Apache cordova)和一个服务器(.NET framework 4.6.1)。在WebGet方法中所有工作都很好,但在其他方法中没有。 这是我的登录操作测试代码。

的Javascript(角)

    $http({
        method: 'Put',
        url: $rootScope.url + '/Login'
    }).then(function successCallback(response) {
    }, function errorCallback(response) {
    });

变量$ rootScope.url具有服务器正在运行的URL。

C#MVC .NET

    [HttpPut]
    [AllowAnonymous]
    public async Task<ActionResult> Login()
    {
        try
        {
            var result = await SignInManager.PasswordSignInAsync("test3", "1!2@Qa", false, shouldLockout: false);
            return null;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

当我在网络中进行此调用时,我得到了这个

 http://localhost:4400/xhr_proxy?rurl=http%3A//localhost%3A49266/App//Login.

通过一些谷歌搜索,我得到的结果是同源策略是这个AJAX调用失败的原因。

查看this文章,我得到了我们应该使用CORS的原因。但我不明白在生产环境中如何使用它们的完美方式。

如何确保我的服务器只接受来自我客户的电话?我必须为客户端javascript调用添加一个自定义标头,服务器将检查是否存在?

我找到了一些类似的解决方案  HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");

   <httpProtocol>
  <customHeaders>
    <clear />
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
</httpProtocol>

但我认为使用这种方式我会让任何带有javascript的网站对服务器进行操作。

如何创建安全的cors政策?

1 个答案:

答案 0 :(得分:0)

您是对的,使用*将允许任何网站使用您的API。您想要用完全限定的域替换*,例如https://www.{domain}.com。如果您有多个域/子域,也可以提供以逗号分隔的列表。

此外,如果您使用的是特定的设置,也可以限制标题和方法。以下是一些更多信息:https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api