Пример active-directory-dotnet-webapi-onbehalfof не работает
Я пытаюсь запустить пример active-directory-dotnet-webapi-onbehalfof в режиме одного арендатора. Я зарегистрировал службу веб-приложений и собственный клиент приложений в качестве глобального администратора для арендатора. Когда я запускаю образец, как пользователь в клиенте, я могу получить токен в клиенте только после того, как выскакивает согласие (впервые для пользователя), и затем вызов обращается к службе, но там это терпит неудачу с ниже. Это почему? Документация говорит, что когда администратор арендатора регистрирует приложение, дальнейшее согласие не требуется? Я не думаю, что можно дать согласие, когда удаленный веб-интерфейс пытается получить токен OBO. Что-то глючит... Команда AAD, пожалуйста, уточните, как использовать функцию OBO.
AADSTS65001: Пользователь или администратор не дал согласие на использование приложения с идентификатором 'b824502e-fe8a-4770-bd98-8d65a07efcc3'. Отправьте интерактивный запрос авторизации для этого пользователя и ресурса. Идентификатор трассировки: ad7843d0-be4e-4098-8f7c-43c8e5505cfc Идентификатор корреляции: 140466a4-7250-429f-8843-dbd4f63dc60e Метка времени: 2016-11-25 21:46:13Z
1 ответ
Когда вы регистрируете приложение с помощью портала управления Azure (manage.windowsazure.com) в качестве администратора клиента, тогда да, вы не должны получать согласие, если в этом же клиенте извлекаются последующие токены.
Поскольку вы видите согласие на собственное клиентское приложение, а затем получаете это сообщение об ошибке, мы должны предположить, что что-то не выполняется, что может подавить согласие для вашего приложения.
Чтобы решить эту проблему, я рекомендую просто инициировать интерактивный запрос на авторизацию, как и следует из сообщения об ошибке. Вы можете сделать это, сгенерировав URL-адрес входа для своего приложения со специальной строкой запроса, которая заставит запросить согласие широкого клиента (prompt = admin_consent).
Вот скелет для URL, который вам нужно заполнить:
https://login.microsoftonline.com/<TenantID>/oauth2/authorize?client_id=<AppID>&response_type=code&redirect_uri=<RedirectURI>&resource=<ResourceURI>&prompt=admin_consent
Вы можете сделать это для всех приложений, которые вы зарегистрировали, и вы не должны сталкиваться с проблемами согласия (при условии, что вы действительно входите в систему как администратор клиента).
Я надеюсь, что это решит вашу проблему.