Почему я получаю сообщение «400 — неверный запрос» при запросе токена доступа из Azure B2C с использованием потока ROPC?

Контекст

У меня есть клиент Azure B2C с регистрацией приложения под названием App Simulator. У меня есть консольное приложение .net 8 C#, которое имитирует активность моего приложения. Чтобы имитировать пользователей, консольное приложение подключается к Azure B2C с помощью выделенного пользовательского потока, который использует учетные данные пароля владельца ресурса (ROPC) для получения токена доступа.

Я считаю, что выполнил шаги, описанные в документации Microsoft.

Вот URL-адрес, который я использую для получения токена доступа:

POST https://<my_tenant>.b2clogin.com/<my_tenant>.onmicrosoft.com/B2C_1_<my_ropc>/oauth2/v2.0/token

Вот тело моего запроса с типом контента application/x-www-form-urlencoded:

username: "<my_user>@<my_tenant>.onmicrosoft.com"
password: "<password>"
scope: "openid <my_app_registration_id>"
client_id: "<my_app_registration_id>"
response_type: "token id_token"
grant_type: "password"

MFA отключен для пользователя.

Проблема

Я не могу получить токен: я всегда получаю код статуса 400 Bad Request от B2C без каких-либо подробностей или журналов (кроме non_parsable_oauth_error, указанного MSAL).

Вот конфигурация регистрации приложения:

  • oauth2AllowImplicitFlow = true

И предоставленные разрешения:

Вопрос

Почему я получаю значок 400 - Bad Request при запросе токена доступа из Azure B2C с использованием потока ROPC в Postman?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
274
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Тело вашего запроса сформировано неправильно. В теле необходимо использовать кодировку параметров URL, как если бы вы отправляли форму.

Попробуйте POST еще раз со следующим телом:

username=<my_user>@<my_tenant>.onmicrosoft.com&password=<password>&scope=openid+<my_app_registration_id>&client_id=<my_app_registration_id>&response_type=token+id_token&grant_type=password

Ответ принят как подходящий

Ошибка возникает, если вы пропустили выбор допустимого «Поддерживаемого типа учетной записи» для работы с пользовательскими потоками при регистрации приложения Azure AD B2C.

Я создал одно приложение в своем клиенте Azure B2C с «Поддерживаемым типом учетной записи», как показано ниже:

Первоначально я тоже получил ту же ошибку, когда пытался сгенерировать токен доступа с использованием потока ROPC через Postman для вышеуказанного приложения:

POST https://<my_tenant>.b2clogin.com/<my_tenant>.onmicrosoft.com/B2C_1_<my_ropc>/oauth2/v2.0/token

username: <my_user>@<my_tenant>.onmicrosoft.com
password: <password>
scope: openid <my_app_registration_id>
client_id: <my_app_registration_id>
response_type: token id_token
grant_type: password

Ответ:

Чтобы устранить эту ошибку, обязательно зарегистрируйте приложение с Поддерживаемым типом учетной записи как «Учетные записи в любом поставщике удостоверений или каталоге организации (для аутентификации пользователей с помощью пользовательских потоков)»:

Теперь я предоставил те же разрешения API, что и вы, при регистрации приложения B2C, например:

В манифесте регистрации приложения я включил для следующих настроек значение «true», как показано ниже:

Включена опция потоков для мобильных и настольных компьютеров, позволяющая общедоступным клиентам:

Когда я заменил client_id и scope указанным выше идентификатором приложения, я успешно получил ответ с токеном доступа следующим образом:

POST https://<my_tenant>.b2clogin.com/<my_tenant>.onmicrosoft.com/B2C_1_<my_ropc>/oauth2/v2.0/token

username: <my_user>@<my_tenant>.onmicrosoft.com
password: <password>
scope: openid <my_app_registration_id>
client_id: <my_app_registration_id>
response_type: token id_token
grant_type: password

Ответ:

Из вашего изображения разрешений API я заметил, что вы добавили profile разрешение, которое не будет присутствовать при регистрации приложения B2C, созданного с поддерживаемым типом учетной записи, как «Учетные записи в любом поставщике удостоверений или каталоге организации (для аутентификации пользователей с помощью пользовательских потоков)».

Чтобы решить вашу проблему, создайте новую регистрацию приложения B2C с поддерживаемым типом, разрешающим потоки пользователей, и снова сгенерируйте токен, как я упоминал выше.

Другие вопросы по теме