Ответ 1
Аутентификация
Web API предполагает, что аутентификация происходит на хосте. IIS использует HTTP-модули для аутентификации. Теперь asp.net позволяет вам настроить через web.config любой из модулей аутентификации, встроенных в IIS или ASP.NET, или написать собственный HTTP-модуль для выполнения пользовательской проверки подлинности.
Вы можете использовать несколько аутентификаций одновременно, это не проблема. В этом случае вам потребуется проверка подлинности Windows и анонимная аутентификация. Аутентификация Windows защитит ваш веб-сайт, и анонимная аутентификация откроет ваш веб-сайт Api.
Настройка проверки подлинности в IIS
Хостинг на IIS Express Откройте панель "Свойства" (через F4, а не свойства проекта) и примените требуемую аутентификацию Установите "Анонимная аутентификация" на "Отключено". Установите "Аутентификация Windows" на "Включено".
Хостинг на IIS 7 или более поздней версии В диспетчере IIS откройте функцию проверки подлинности в представлении функций. Включить/Отключить требуемую аутентификацию. Если система аутентификации не является опцией (например, Windows), вам необходимо установить ее через диспетчер сервера (Добавить службы ролей).
Авторизация
авторизация asp.net
В ASP.NET существует два способа авторизации доступа к данному ресурсу: авторизация файлов и URL. Я не буду объяснять это здесь, но вы можете прочитать эту статью .
Важно то, что вы можете разрешать/запрещать пользователям и/или группам в web.config.
Конфигурация по умолчанию для проверки подлинности Windows позволяет разрешать только пользователям аутентификации *****, например:
<authorization>
<deny users="?" ></deny>
</authorization>
Если вы хотите разрешить анонимным пользователям ? под адресом URL-адреса "api", добавьте это:
<location path="api">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
Разрешение веб-Api
asp.net Администрирование веб-Api происходит позже в конвейере, ближе к контроллеру. Это позволяет вам делать более подробный выбор при предоставлении доступа к ресурсам.
Web API предоставляет встроенный фильтр авторизации AuthorizeAttribute. Существует также AllowAnonymousAttribute. Вы можете использовать его глобально, на контроллере или на действии. По умолчанию разрешены все действия.
Тестирование Api
Через браузер
Интегрированная проверка подлинности Windows работает с любым браузером, поддерживающим схему проверки подлинности Negotiate. Это cas для Internet Explorer и теперь Chrome: они автоматически будут предоставлять учетные данные Windows при просмотре веб-сайта с помощью проверки подлинности Windows. Firefox не поддерживает эту схему, поэтому я часто проверяю аутентификацию с помощью этого браузера.
Через HttpClient Ваш HttpClient должен предоставлять учетные данные при вызове Web Api (например, в браузерах). Это делается путем настройки HttpClientHandler с соответствующими учетными данными.
//use default credentials aka Windows Credentials
HttpClientHandler handler = new HttpClientHandler()
{
UseDefaultCredentials = true
};
//use username/password credentials
HttpClient client = new HttpClient(handler);
var handler = new HttpClientHandler {
Credentials = new NetworkCredential(username, password)
};
var httpClient = new HttpClient(handler);
Надеюсь, это поможет вам.
В последнее время важно отметить, что ваш веб-сайт Api не позволяет анонимным пользователям вообще! Поскольку вы используете учетные данные по умолчанию в своем HttpClientHandler, это означает, что для вашей службы требуется проверка подлинности Windows. Вам не нужно настраивать учетные данные в открытой и общедоступной службе.