Как отладить приложение Azure с недостаточными разрешениями B2C?
Окружающая среда
У меня есть клиент Azure B2C для управления простой регистрацией имени пользователя и пароля и входом в систему, следуя примеру, приведенному здесь: https://github.com/Azure-Samples/active-directory-b2c-javascript-hellojs-singlepageapp
Арендатор управляет аутентификацией для приложения javascript/html на внешнем интерфейсе, а затем это внешнее приложение связывается с приложением WebAPI на внутреннем сервере для своих данных.
Внутренний WebAPI взят из примера, найденного здесь: https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi
Оба приложения зарегистрированы у арендатора и требуют аутентификации для работы.
Что работает
Аутентификация отлично работает при тестировании непосредственно с портала Azure.
Успешный запрос авторизации:
Request URL:https://login.microsoftonline.com/dhzb2c.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_SiUpIn&client_id=2bb37577-246c-48a7-b047-2ce2a748dfda&nonce=defaultNonce&redirect_uri=http%3A%2F%2Flocalhost%3A65328%2Fredirect.html&scope=openid&response_type=id_token&prompt=login
Request Method:GET
Что не работает
При попытке войти через интерфейс с фоном, зарегистрированным в арендаторе, я получаю это:
Correlation ID: 4ac6f519-0949-42e0-96a7-d84d14454bbb
Timestamp: 2017-07-10 23:07:48Z
AADB2C90205: This application does not have sufficient permissions against this web resource to perform the operation.
И API-интерфейс никогда не достигается.
Неудачный запрос на авторизацию:
Request URL:https://login.microsoftonline.com/tfp/dhzb2c.onmicrosoft.com/B2C_1_SiUpIn/oauth2/v2.0/authorize?client_id=2bb37577-246c-48a7-b047-2ce2a748dfda&response_type=token%20id_token&redirect_uri=http%3A%2F%2Flocalhost%3A65328%2Fredirect.html&state=%7B%22client_id%22%3A%222bb37577-246c-48a7-b047-2ce2a748dfda%22%2C%22network%22%3A%22adB2CSignInSignUp%22%2C%22display%22%3A%22page%22%2C%22callback%22%3A%22_hellojs_cprxketk%22%2C%22state%22%3A%22%22%2C%22redirect_uri%22%3A%22http%3A%2F%2Flocalhost%3A65328%2Fredirect.html%22%2C%22scope%22%3A%22openid%2Chttps%3A%2F%2Fdhzb2c.onmicrosoft.com%2Ftestb2capi%22%2C%22page_uri%22%3A%22http%3A%2F%2Flocalhost%3A65328%2Findex.html%22%7D&scope=openid%20https://dhzb2c.onmicrosoft.com/testb2capi
Request Method:GET
Что я пробовал
Я попытался найти журналы, например журнал ошибок прав доступа, которые бы рассказывали о проблеме, но не нашел ни одного.
Вопрос
Возможно, есть другое место, где мне нужно искать логи?
Что еще я могу сделать?
Сообщения об ошибках аутентификации предназначены для ограничения предоставляемой ими информации, поэтому должен быть какой-то способ получить более подробную информацию об ошибке. Что я не знаю?
3 ответа
Во-первых, это не отвечает на мой первоначальный вопрос, поэтому я не буду отмечать это как ответ. Я позволю кому-то еще дать реальный ответ, может быть, значение корреляции является значимым? Этот ответ, однако, решает мою проблему.
В Azure B2C разрешения называются "областями действия".
Это означает, что для успешной аутентификации без данной ошибки разрешений необходимо следующее:
(1) Внутреннее приложение должно опубликовать область видимости
(2) Внешнее приложение должно подписаться на эту область
(3) Запрос на авторизацию должен включать объем в scope
поле.
Request URL:https://login.microsoftonline.com/tfp/dhzb2c.onmicrosoft.com/B2C_1_SiUpIn/oauth2/v2.0/authorize?client_id=2bb37577-246c-48a7-b047-2ce2a748dfda&response_type=token%20id_token&redirect_uri=http%3A%2F%2Flocalhost%3A65328%2Fredirect.html&state=%7B%22client_id%22%3A%222bb37577-246c-48a7-b047-2ce2a748dfda%22%2C%22network%22%3A%22adB2CSignInSignUp%22%2C%22display%22%3A%22page%22%2C%22callback%22%3A%22_hellojs_bb3gzjb8%22%2C%22state%22%3A%22%22%2C%22redirect_uri%22%3A%22http%3A%2F%2Flocalhost%3A65328%2Fredirect.html%22%2C%22scope%22%3A%22openid%2Chttps%3A%2F%2Fdhzb2c.onmicrosoft.com%2Ftestb2capi%2Fread%22%2C%22page_uri%22%3A%22http%3A%2F%2Flocalhost%3A65328%2F%22%7D&scope=openid%20https://dhzb2c.onmicrosoft.com/testb2capi/read
Request Method:GET
Заметка
Я думаю, что имя публикуемой области не имеет значения, важно только то, что используется хотя бы одна область.
Если вы идете на этот GitHub и скачать
https://github.com/Azure-Samples/active-directory-b2c-advanced-policies
в нем вы найдете SAMPLE MVC приложение под названием JourneyRecorder
Если вы развернете это в Azure, вы сможете затем установить свою политику в режим разработки и записать информацию, которую вы можете использовать для отладки, некоторые люди предпочитают одно из представлений приложения, но я думаю, что это по-прежнему наиболее информативно.
DeploymentMode="Development"
UserJourneyRecorderEndpoint="https://your-app-name/stream?id=<Any GUID You can think of>" >
Затем загрузите и выполните свою политику, а затем перейдите к
https://your-app-name/trace_102.html?id=<your GUID>
Это не отличный пользовательский интерфейс, но если вы настроите его правильно, он запишет ваши конечные точки, и вы можете использовать его для отладки поездок B2C
У нас была похожая проблема с нашими аутентификациями API. Мы добавили приложение B2C, опубликовали область действия (user_impersonation) и добавили API-доступ к себе. Позже мы решили добавить пользовательский домен в нашу Azure AD и сделать его основным доменом. Все приложения, которые мы добавили после этого, получили ту же ошибку (AADB2C90205) при авторизации. Мы смогли "отладить" происходящее благодаря использованию инструментов разработчика браузера ( Chrome или Firefox) и просмотру вкладки "Сеть" при загрузке списка приложений. Единственное отличие, которое мы заметили, это массив "identifierUris". Тот, который работал, имел по умолчанию https://somestring.onmicrosoft.com/ApiName/
URL, в то время как все другие приложения, которые не работали, с нашими пользовательскими Uri. Наше решение состояло в том, чтобы снова сделать основной домен по умолчанию .onmicrosoft.com / uri и просто добавить наш пользовательский домен.
Итак, в ответ на ваш вопрос: вы можете использовать регистратор сетевого трафика вашего браузера, чтобы проанализировать, что идет не так во время аутентификации. Я надеюсь, что информация в этом ответе может помочь другим получить ту же ошибку при поиске собственных решений.
Сообщение от @David верное, однако приложения теперь помечены как (Legacy) и App registrations
Рекомендовано.
Однако это очень похоже. В вашемApp registration
нажмите на Expose an API
и добавить новую область. После этого нажмите наAPI permissions
а также Add a permission
. ВыбратьAPIs my organization uses
, твой App registration
имя и выберите вновь созданную область. Если вам нужно согласие администратора, вам нужно будет нажать наGrant admin conscent for <YOUR ADB2C>
. После этого у меня все заработало.