Проверьте происхождение CORS в .net 6, когда требуется DI
Наш сервис позволяет клиентам вводить свой собственный домен для доступа к сервису после установки соответствующих записей DNS. Их домен/субдомен привязан к нашему переднему серверу, что делает его более персонализированным для их пользователей.
Поскольку любой клиент может изменить свой домен в любое время или даже добавить новые, нам нужно сделать вызов базы данных, чтобы проверить заголовок источника.
Я пытался просто НЕ обрабатывать cors, как обычно (app.UseCors() и т. д.), а вместо этого использовал фильтры для разрешения «ситуации с заголовком». Я отказался от этого подхода, потому что понял, что он просто не будет работать (конечная точка с «ВАРИАНТАМИ» не разрешена). Он также кажется грязным, даже если бы он работал.
Я попытался реализовать ICorsPolicyProvider, создав пользовательский атрибут CORS, но это кажется тупиком, поскольку я не могу найти способ внедрить службы, которые мне нужны для проверки источника.
Есть ли способ проверить заголовок Origin, имея доступ к необходимым службам?
1 ответ
Решение заключается в реализации ICorsService. Реализация по умолчанию (CorsService) проста для понимания и является хорошей отправной точкой.
В конфигурации ваших служб замените вызов
услуги.AddCors();
с:
services.AddTransient<ICorsService, YourImplementationOfICorsService>() .AddTransient<ICorsPolicyProvider, DefaultCorsPolicyProvider>();
Все остальное то же самое. Единственным недостатком этого решения является то, что в вашу реализацию ICorsService нельзя внедрить зависимости с областью действия.