Включить CORS из определенного источника на размещенной службе Topshelf

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

У меня есть 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, и если я проверяю заголовки ответа при непосредственном вызове метода, я вижу следующее

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

1 ответ

Ладно , так две проблемы с вопросом.

добавление определенных источников 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, и это работает. Надеюсь, я спасу кого-то еще два потерянных дня жизни

Другие вопросы по тегам