【问题标题】:How to use cors with the perfect way如何以完美的方式使用 cors
【发布时间】:2018-07-06 16:05:09
【问题描述】:

我正在尝试集成不同的技术(每个不同的域)并创建 RESTfull 操作。例如,我有一个客户端(Apache cordova)和一个服务器(.NET 框架 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 策略?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 是的,如果我的客户端在不同的端口上运行(请参阅 apache cordova for mobile),我不能让每个人都客户端到服务器配置
    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    相关资源
    最近更新 更多