Разрешить анонимность ASP.NET Web API-контроллеру, в то время как остальная часть приложения выполняется под проверкой подлинности Windows
У меня есть веб-приложение ASP.NET с включенной аутентификацией Windows. Мне нужно написать контроллер веб-API ASP.NET в этом приложении, которое использует некоторую логику доступа к данным приложения. Я не хочу создавать новый проект только для веб-API, поскольку мне нужно выставить только небольшую конечную точку, которая обрабатывает пару запросов.
Клиенты Web API будут использовать анонимную службу. Чтобы это разрешить, я попытался использовать фильтр действия AllowAnonymous на обоих контроллерах, а также действия. Но, когда я пытаюсь использовать API с помощью Fiddler, запрос терпит неудачу с состоянием 401, говоря "401 - Несанкционированное: доступ запрещен из-за недопустимых учетных данных".
Есть ли способ достичь этого?
Ответы
Ответ 1
Я немного опаздываю на вечеринку, но убедитесь, что анонимная аутентификация включена. Затем добавьте:
<configuration>
...
<location path="api/...">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
</configuration>
В свой web.config.
Я предполагаю, что у вас есть:
<system.web>
...
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
</system.web>
Это сработало для меня.
Ответ 2
Ну, для всех контроллеров, которым требуется аутентификация, нужен атрибут Authorize (который может быть глобальным фильтром) - тогда используйте AllowAnonymous для тех, которые не нуждаются в authN.
Затем убедитесь, что в IIS для vdir включена анонимная аутентификация, а также убедитесь, что в web.config нет глобального элемента полномочий.
Ответ 3
Как я решил проблему, используя Visual Studio 2015 и .NET 4.5.2, было задание свойств проекта веб-API как Анонимная аутентификация и Аутентификация Windows set to Enabled (обратите внимание, что они также должны быть установлены в экземпляре IIS). Затем в моих контроллерах я украсил методы, требующие аутентификации с атрибутом [Authorize]
, а также имя моего настраиваемого атрибута проверки подлинности.
Это разрешило настройку по умолчанию для методов контроллера принимать анонимные вызовы, и только несколько специальных методов, требующих аутентификации, имели дополнительные декораторы. Мне не нужно было добавлять ничего в файлы web.config или WebApiConfig.cs. В Global.asax появился вызов моей настраиваемой статической функции проверки подлинности, которая устанавливает глобальные значения.