Неявный поток AzureAD OIDC с response_type = id_token + token завершается ошибкой, когда пользователь не вошел в систему - PullRequest
0 голосов
/ 31 января 2019

Ключевой вопрос:

Допустимо ли ожидать успешного ответа при запросе 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.

...