ADFS 2016 - OAuth2 SPA - получить новый токен без вывода сообщений - PullRequest
0 голосов
/ 22 января 2019

У меня есть 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+Unable+to+handle+the+OAuth+authorization+request+without+getting+user+input,

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

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

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

1 Ответ

0 голосов
/ 23 января 2019

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

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

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

...