ADFS 2016 - OAuth2 SPA - получить новый токен без вывода сообщений

У меня есть SPA, где пользователь проходит аутентификацию в ADFS и приложение получает токен доступа. Я пытаюсь использовать код JS для имитации функциональных возможностей ADAL JS, где скрытый iframe используется для запроса ADFS для получения нового токена.

Это значение 'src' для iframe:

https://../adfs/oauth2/authorize? client_id =... & response_type = id_token & redirect_uri =... & prompt = none & domain_hint =... & login_hint =... & nonce =...

ADFS настроен с двумя областями: AD и ADLDS (LDAP). Из-за этого я не уверен, какие значения мне нужно передать в параметрах domain_hint & login_hint для пользователя в ADLDS.

Запрос не выполняется с сообщением:

https://....html? client-request-id =... # error = login_required & error_description = MSIS9621% 3a + Невозможно + обработать + запрос + OAuth + авторизация + без + получения + ввода пользователя +.

Средство просмотра событий ADFS показывает эту ошибку:

Сведения об исключении: Microsoft.IdentityServer.Web.Protocols.OAuth.Exceptions.OAuthNoPassiveException: MSIS9233: найдено несколько поставщиков удостоверений для запроса OAuth-авторизации, для приглашения не задано ни одного. Невозможно завершить открытие домашнего царства.

Эта функция действительно поддерживается в ADFS 2016? Есть идеи, что я делаю не так?

+1
22 янв. '19 в 20:13
источник поделиться
1 ответ

Параметр prompt=none говорит о том, что вы хотите передать процессу запрос /authorize без участия пользователя. Но во время его обработки есть кое-что, что требует взаимодействия с пользователем - сервер, вероятно, не знает, какого поставщика удостоверений выбрать, поэтому он возвращает ошибку. Если вы сделаете тот же запрос, просто вставив URL-адрес /authorize в ваш браузер без параметра prompt=none, сервер, вероятно, даст вам возможность выбрать поставщика.

Вы написали, что хотите получить токен доступа, но ваш URL /authorize содержит response_type=id_token. Если вы хотите токен доступа, параметр должен быть response_type=token (см. RFC).

В документации по Azure поддерживается domain_hint запроса domain_hint для OpenID Connect, поэтому параметр scope запроса должен содержать значение openid. Это также необходимо для получения идентификационного токена (если вы этого хотите).

0
23 янв. '19 в 9:39
источник

Посмотрите другие вопросы по меткам или Задайте вопрос