- Клиент: собственное мобильное приложение
- На стороне сервера: веб-API
- Веб-сервер - IIS Onprem 2012R2.
- ADFS 3.0 on Prem 2012R2.
Требование
- Аутентификация из собственного мобильного приложения с ADFS и получение токена носителя oauth2 - успешно.
- WebAPI - Подтверждение полученного токена носителя из мобильного приложения в заголовке «Авторизация» к ADFS и получите претензии.
Код
Добавил это в автозагрузку. cs
app.UseActiveDirectoryFederationServicesBearerAuthentication (новый ActiveDirectoryFederationServicesBearerAuthenticationOptions {MetadataEndpoint = ConfigurationManager.AppSettings ["ida: AdfsMetadataEndpoint};
// Значения для этих двух конфигураций были установлены в файле Web.config.
Добавлен атрибут «Авторизация» в Контроллер. (На данный момент это добавлено только для 1 контроллера, в конечном итоге мы планируем добавить его глобально).
Проблема . Когда клиентское приложение отправляет HTTP-запрос к этому API, включая заголовок «Authorization» с «Bearer», API отвечает 401 Unauthorized. {"message": "Авторизация была отклонена для этого запроса". }
Дополнительные примечания - Это отлично работает, когда веб-API был запущен локально с использованием IIS express или даже был развернут как приложение на IIS локально. Возможность получения значений утверждений.
Проблема возникает только тогда, когда api развернут как приложение на локальном веб-сервере windows 2012 R2.
На веб-сервере в диспетчере IIS для проверки подлинности приложения установлено значение «Анонимный», для идентификатора установлено значение «ApplicationPoolIdentity».
Поскольку для проверки подлинности для приложения API в IIS установлено значение «Анонимный», другие контроллеры API доступны без токена. Только этот контроллер возвращает 401, поскольку у нас есть атрибут «Авторизовать». Итак, очевидно, что атрибут Authorize ожидает чего-то и терпит неудачу.
Есть ли способ узнать, что не так?
Журналы сервера IIS указывают только на 401 неавторизованный запрос, и нет дополнительная информация.
Существуют ли какие-либо настройки, которые необходимо включить в IIS или в коде, чтобы специально вызывать авторизацию на основе токена носителя oauth2?
Ссылки Конфигурация доверяющих частей (веб-API) и клиента Adfs (мобильное собственное клиентское приложение) https://docs.microsoft.com/en-us/previous-versions/adfs-windows-server-2012R2/dn660967 (v = msdn.10)