Есть ли способ сбросить пароль пользователя B2C из приложения b2c, которому предоставлены только разрешения приложения для Microsoft Graph?
У нас есть сценарий, в котором в мультитенантном приложении есть пользователи, не использующие электронную почту, и нам нужно разрешить администраторам сбрасывать пароли. Для обеспечения функций управления пользователями у нас есть служба приложений, использующая пакет SDK для .net Microsoft.Graph. Кажется, единственный способ сбросить пароль пользователя — это использовать resestPassword, но это не может быть вызвано приложением.
Насколько я вижу, единственный доступный нам вариант — настроить пользователя для этой задачи и сохранить его данные в хранилище ключей Azure, а затем позволить приложению войти в качестве пользователя для вызова конечной точки.
Я действительно хотел бы избежать этого подхода, если это возможно, и кажется, что это должен быть общий сценарий, поэтому я надеюсь, что есть лучший способ?
Привет, вы можете использовать обновление пользователя для сброса пароля пользователя B2C.
PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json
{
"passwordProfile": {
"forceChangePasswordNextSignIn": false,
"password": "xWwvJ]6NMw+bWH-d"
}
}
Для получения дополнительной информации: https://learn.microsoft.com/en-us/graph/api/user-update?view=graph-rest-1.0&tabs=http#permissions
Я попытался воспроизвести то же самое в своей среде и получил результаты, как показано ниже:
Обратите внимание: согласно MsDoc, в настоящее время невозможно сбросить пароль для пользователей с предоставлением только разрешений для приложений.
Сброс пароля пользователя с разрешениями приложения приведет к следующей ошибке:
POST https://graph.microsoft.com/v1.0/users/UserID/authentication/passwordMethods/28c10230-6103-485e-b985-444c60001490/resetPassword
Content-type: application/json
{
"newPassword": "xxxx"
}
В качестве альтернативы я создал приложение Azure AD и предоставил следующие разрешения API:
Предоставьте роль администратора пользователя субъекту-службе, как показано ниже:
Теперь сгенерируйте токен доступа через поток учетных данных клиента, используя следующие параметры:
GET https://login.microsoftonline.com/TenantID/oauth2/v2.0/token
client_id:ClientID
client_secret:ClientSecret
scope:https://graph.microsoft.com/.default
grant_type:client_credentials
Используя сгенерированный выше токен, попробуйте сбросить пароль, используя следующий запрос:
PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json
{
"passwordProfile": {
"password": "xxxx"
}
}
Вы можете использовать параметр forceChangePasswordNextSignIn
в зависимости от ваших требований.
Использованная литература:
Сброс пароля Azure с помощью Graph API от CarlZhao-MSFT
Сбросьте пароль пользователя в ADB2C с помощью MS Graph API от kh_Ro
Это сработало отлично, спасибо. Я не добавил участника-пользователя в роль администратора пользователя. Даже с этой конечной точкой resetPassword не работает, но обновление пользователя делает свою работу.