#azure #authentication #f# #azure-active-directory #safe-stack
Вопрос:
Простой, но открытый вопрос: кому-нибудь удалось подключить приложение БЕЗОПАСНОГО стека к Azure AD B2C, чтобы приглашенные пользователи (в клиенте B2C) могли входить в систему с помощью определенного потока пользователей или пользовательской политики?
Конкретный вопрос, который мог бы позволить мне замкнуть цикл в моем подходе: любая идея, почему приложение использует Microsoft.Идентичность.Веб для обработки аутентификации столкнется с этой плохо документированной ошибкой, и как ее решить? —
«Приложение с идентификатором <<Ugly_GUID><Ugly_GUID>> не может получить маркер идентификатора либо потому, что область openid не была указана в запросе, либо приложение не авторизовано для этого».
Подробная информация о моих неудачных попытках до сих пор: С некоторыми изменениями я смог следовать серии из двух частей Райана Палмера, чтобы принудительно выполнить проверку подлинности Azure AD для моего приложения SAFE Stack (v3, .NET 5) :
- https://www.compositional-it.com/news-blog/safe-authentication-with-azure-active-directory/
- https://www.compositional-it.com/news-blog/safe-stack-authentication-with-active-directory-part-2/
Это приводит к поведению, при котором мой реальный логин Azure предоставляет мне доступ к приложению. Но цель состоит в том, чтобы включить поток пользователей (или пользовательскую политику, что бы ни работало), чтобы пользователи, авторизованные в моем клиенте Azure AD B2C, могли проходить проверку подлинности и использовать приложение. С настройками, подобными приведенным ниже (и многими другими вариантами) в appsettings.json, вызов URL-адреса приложения успешно перенаправляет поток пользователей для входа:
"AzureAD":
{
"Instance": "https://RoundTableExcaliburDev.b2clogin.com/",
"Domain": "RoundTableExcaliburDev.onmicrosoft.com",
"ClientId": "26e6d007-be46-4928-b06e-04acdbfd2913",
"CallbackPath": "/api/login-callback",
"SignedOutCallbackPath": "/api/logout-callback",
"SignUpSignInPolicyId": "B2C_1A_SIGNUP_SIGNIN"
}
URI «b2clogin» (против login.microsoftonline.com в оригинале Райана Палмера) и идентификатор SignUpSignInPolicyId успешно вызывают нужный поток пользователей, и я могу войти (и/или зарегистрироваться) в качестве фиктивного пользователя, сохраненного в моем ресурсе Azure AD B2C. Но когда поток перенаправляется в мое приложение, я получаю ошибку «область действия openid», указанную выше.
Ошибка возникает как на локальном хосте, так и в версии, развернутой в экземпляре веб-приложения Azure, и возникает в Firefox, Chrome и Edge.
Дополнительные сведения о Azure AD B2C:
- Я зарегистрировал веб-приложение с возвращаемыми URL-адресами https://<имя_приложения>.azurewebsites.net/api/login-callback и https://localhost:8080/api/login-callback
- Права «Токены доступа» и «Идентификационные токены» были предоставлены в разделе аутентификации зарегистрированного приложения B2C.
- Зарегистрированное приложение имеет секрет (не сертификат), но я нигде не использовал это значение, и ни в одной документации, которую я еще видел, не указано, где оно будет использоваться.
- В отсутствие проверки подлинности приложение SAFE Stack работает должным образом на локальном хосте и в Azure.
Ответ №1:
Ну, я нашел волшебную кнопку «исправить все» для моей проблемы, но я не знаю, зачем это было необходимо. При создании регистрации приложения в Azure AD B2C (процесс, который я повторил несколько раз), я установил флажок «Предоставить согласие администратора на openid и разрешения на автономный доступ» в соответствии с инструкциями здесь и в других местах. В представлении «Разрешения API» в зарегистрированном приложении разрешения отображаются в разделе «Microsoft Graph» как «offline_access» и «openid». Несмотря на то, что эти разрешения уже были предоставлены, моя проблема исчезла, когда я нажал «Предоставить согласие администратора для [имя приложения]» и подтвердил (повторное)предоставление.
Учитывая, что в моем неясном сообщении об ошибке упоминались разрешения в «области openid», и учитывая, что я больше ничего не делал между предыдущим сбоем и последующим успехом, я не сомневаюсь, что это было решением, но я не понимаю, почему это было необходимо.