Как использовать cors с идеальным способом

Я пытаюсь интегрировать разные технологии (каждый домен) и создавать действия 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-адрес, на котором работает сервер.

С# 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.

Просматривая эту статью, я понимаю, почему мы должны используйте КОРС. Но я не понимаю, как это идеальный способ использовать их в производственной среде.

Как я могу быть уверен, что мой сервер будет принимать звонки только от моего клиента? Мне нужно добавить собственный заголовок к клиентским вызовам javascript, который сервер проверит, существует ли?

Я нашел несколько решений, таких как HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");

or

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

Но я думаю, что таким образом я позволю любому сайту с javascript выполнять действия на сервере.

Как создать защищенную политику cors?


person GomuGomuNoRocket    schedule 27.01.2018    source источник


Ответы (1)


Вы правы, использование * позволит любому сайту использовать ваш API. Вместо этого вы хотите заменить * своим полным доменом (доменами), например https://www.{domain}.com. Вы также можете указать список через запятую, если у вас несколько доменов/поддоменов.

Кроме того, вы также можете ограничить заголовки и методы, если у вас есть определенный набор, который вы используете. Вот еще немного информации: https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

person Kyle Dodge    schedule 27.01.2018
comment
да, если мой клиент работает на другом порту (см. Apache Cordova для мобильных устройств), я не могу настроить всех клиентов на сервер - person GomuGomuNoRocket; 28.01.2018