Включить CORS из определенного источника на размещенной службе Topshelf - PullRequest
0 голосов
/ 23 февраля 2019

Я уверен, что это дубликат, но ни один из найденных ответов не работает.

У меня web.api, размещенный в качестве службы Windows, и мне нужно разрешить CORS дваконкретные источники.

У меня есть это в моем startup.cs

config.EnableCors(
            new EnableCorsAttribute("http://customer.mydomain.com, 
                                     http://admin.mydomain.com", "*", "*")
            );
        var policy = new CorsPolicy()
        {
            AllowAnyHeader = true,
            AllowAnyMethod = true,
            SupportsCredentials = true
        };

        policy.Origins.Add("*http://customer.mydomain.com");
        policy.Origins.Add("*http://admin.mydomain.com");

        app.UseCors(new CorsOptions
        {
            PolicyProvider = new CorsPolicyProvider
            {
                PolicyResolver = context => Task.FromResult(policy)
            }
        });

Итак, я понимаю, что я буду разрешать доступ к своему сервису только из поддоменов администратора и клиента?

, а затем на моем контроллере у меня

[EnableCors("*.mydomain.com","*","*")]  
public class MasterDataController

все строится и радует, но когда я запускаю свой сервис и вызываю метод в контроллере прямо из URL браузера, он отвечает нормально, не долженразве это блокирует меня, поскольку я не звоню с mydomain.com?

Я видел ответы, в которых говорилось, что мне нужно отправить свое происхождение в моем звонке, но, конечно, это не тот ответ, поскольку я специально хочу прекратитьзвонки, если они не из моего разрешенного происхождения?Я чувствую, что иду по кругу здесь

[Обновление] Я также добавил

   <httpProtocol>
 <customHeaders>
   <add name="Access-Control-Allow-Origin" value="*.bizcash.co.za" />
 </customHeaders>

к моему IIS-прокси и если я проверяю заголовки ответакогда я вызываю метод напрямую, я вижу следующее

enter image description here * .redacted, очевидно являющееся моим доменом.Тем не менее, я все еще могу позвонить прямо из моего браузера, и это не должно позволять это, не так ли?Разрешить звонки только с моего домена?

1 Ответ

0 голосов
/ 25 февраля 2019

хорошо, поэтому две проблемы с вопросом.

добавление определенных источников CORS не останавливает вызов службы непосредственно в браузере, оно останавливает другие веб-приложения, вызывающие ее.Я неправильно его тестировал.

Поэтому вам нужно внести изменения, развернуть их на своем сервере, а затем протестировать через обычные приложения.

, чтобы заставить его работать. Это то, что у меня есть.в конце концов

           var policy = new CorsPolicy()
        {
            AllowAnyHeader = true,
            AllowAnyMethod = true
        };

        policy.Origins.Add("https://customer.mydomain.com");
        policy.Origins.Add("https://admin.mydomain.com");

        app.UseCors(new CorsOptions
        {
            PolicyProvider = new CorsPolicyProvider
            {
                PolicyResolver = context => Task.FromResult(policy)
            }
        });

Вот и все, только что в файле startup.cs и все работает.Надеюсь, я спасу кого-то еще два потерянных дня жизни

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...