Ключевой вопрос:
Допустимо ли ожидать успешного ответа при запросе response_type=id_token+token
, а пользователь не вошел в систему?Или я должен сначала получить id_token
, а затем сделать второй запрос на access_token
?(И, таким образом, исправьте angular2-oauth2-oidc.)
Некоторые предыстории и ожидания:
- У меня есть клиент AzureAD, в котором я определил, и корпоративное приложение.
- В этом приложении включены неявные потоки и разрешены оба разрешения для id_token и токена.
- Я определил одну область, специфичную для приложения.
- Приложение относится к моемуарендатор (поэтому не использует конечную точку авторизации / common).
- Пользователь находится в Azure ID и получил доступ к приложению.
Обратите внимание, что все в порядкеучитывая, что у пользователя уже есть активный сеанс с Azure / Microsoft (например, он уже вошел в систему по адресу login.microsoftonline.com).
Проблема заключается в том, что у пользователя нет активного сеанса.Я ожидаю, что Azure зарегистрирует их, а затем выдаст id_token и access_token.Является ли это ожидание разумным?
Три контрольных примера:
Когда я запрашиваю id_token, только пользователю предлагается войти в систему, и мне выдаются id_token.
https://login.microsoftonline.com/a3fbb27a-68f7-42bf-a757-8b3849e72df5/oauth2/v2.0/authorize?client_id=2b58c4c9-22df-4e50-9abf-1d721cf694b0&response_type=id_token&redirect_uri=http%3A%2F%2Flocalhost%3A4200&scope=openid&nonce=678910
Когда я запрашиваю токен, только пользователю предлагается войти в систему, и мне выдается access_token.
https://login.microsoftonline.com/a3fbb27a-68f7-42bf-a757-8b3849e72df5/oauth2/v2.0/authorize?client_id=2b58c4c9-22df-4e50-9abf-1d721cf694b0&response_type=token&redirect_uri=http%3A%2F%2Flocalhost%3A4200&scope=api%3A%2F%2F2b58c4c9-22df-4e50-9abf-1d721cf694b0%2fdostuff&nonce=678910
Когда я запрашиваю и id_token, и токен (request_type = id_token% 20token) Iполучить server_error
: error_description=AADSTS50000%3a+There+was+an+error+issuing+a+token.
https://login.microsoftonline.com/a3fbb27a-68f7-42bf-a757-8b3849e72df5/oauth2/v2.0/authorize?client_id=2b58c4c9-22df-4e50-9abf-1d721cf694b0&response_type=id_token%20token&redirect_uri=http%3A%2F%2Flocalhost%3A4200&scope=openid%20api%3A%2F%2F2b58c4c9-22df-4e50-9abf-1d721cf694b0%2fdostuff&nonce=678910
Дополнительные примечания:
- Приведенные выше GUID являются поддельными, но согласованными для трех образцов.
- В конечном счете, приложение angular2 + (v6.1.10), и я использую angular2-oauth2-oidc.
- В случае только id_token angular2-oauth2-oidc не может «проверить токены» и невыполните второй круговой обход для получения access_token.
- В случае только токена angular2-oauth2-oidc постоянно перенаправляет обратно на сервер авторизации (предположительно, чтобы получить id_token).
- В случае id_token + token получена вышеуказанная ошибка.
- Тесты, приведенные выше, воспроизводятся вручную / без приложения / прямо в браузере.
- Другие сообщения, касающиеся AADSTS50000, похоже, не связаны.
Страница Microsoft натема указывает, что id_token+token
поддерживается, но образец URL использует только id_token
.