AD FS токен доступа к веб-API без вмешательства пользователя - PullRequest
0 голосов
/ 06 июля 2018

В поисках способа получить токен доступа к приложению, который может выполнять вызовы API, без необходимости входа пользователя. Я выполнил этот сценарий использования с помощью Azure AD, где я получил токен доступа к приложению для записи документов в библиотеку SharePoint. , Я недостаточно знаком с Prem AD AD и с тем, как получить токен доступа, используя секрет клиента, поэтому мне не нужно мешать пользователю.

Фон
Мы создали специальное приложение справочной службы на основе набора API. Наша цель - создавать заявки из других систем (приложений), которые требуют создания заявки. Идея состоит в том, чтобы сгенерировать токен доступа, который имеет разрешение на API, чтобы я мог создать заявку без приглашения пользователя войти в систему, поскольку в некоторых случаях заявка не будет специфичной для пользователя.

Пример использования
У нас есть приложение, которое предоставляет неработающим доступ к ресурсам в нашей среде. Эти не связанные с сотрудниками даты окончания связаны с ними, когда дата окончания пройдена, и они не были продлены заранее, необходимо будет сгенерировать заявку для команды, чтобы обновить свою запись в AD.

Что я сделал
Я создал «серверное приложение» в AD FS и сгенерировал секрет клиента. Я могу сделать запрос и получить токен доступа, используя секрет клиента, однако он не «связан», скажем, с API Wep, который мне нужно вызвать.

Как бы я дал разрешение серверному приложению на доступ к веб-API?

Дополнительный Мы используем AD FS на сервере 2016 года.

Ответы [ 2 ]

0 голосов
/ 10 июля 2018

Обнаружена проблема, из-за которой токен, который я получал через серверное приложение, дал мне ответ «Отказано в авторизации» от API.

Оказывается, что конфигурация AD FS была правильной, проблема была в моем API с допустимой аудиторией и действительным издателем.

app.UseActiveDirectoryFederationServicesBearerAuthentication(new ActiveDirectoryFederationServicesBearerAuthenticationOptions
        {
            MetadataEndpoint = ConfigurationManager.AppSettings["ADFS:MetadataEndpoint"],
            TokenValidationParameters = new TokenValidationParameters()
            {
                ValidAudiences = GetValidAudiences(),
                ValidIssuers = GetValidIssuers()
            }
        });

Мне нужно было включить издателя и аудиторию, которую серверное приложение предоставляло в токене доступа

Пример ValidIssuer

microsoft:identityserver:{appIdentifier}

Пример ValidAudience

http://{fqdn}/adfs/services/trust

после добавления их в validIssuer и validAudience токен доступа работал отлично.

0 голосов
/ 08 июля 2018

Вам нужен конфиденциальный клиент поток.

По сути, вы настраиваете приложение и веб-API.

По умолчанию приложение имеет разрешение на вызов этого веб-API, но вы можете поиграться с политиками контроля доступа.

Также обратите внимание, что вы можете настроить правила утверждений в веб-API.

Это также может быть полезно.

...