Измените пароль пользователя с помощью Microsoft. Azure .ActiveDirectory.GraphClient - PullRequest
1 голос
/ 27 января 2020

Я пытался изменить пароль пользователя с помощью метода ChangeUserPassword от Microsoft. Azure .ActiveDirectory.GraphClient. Я даже добавил User.ReadWrite.All, Directory.AccessAsUser.All для приложения b2 c, но это не работает. Можно ли изменить пароль для моих пользователей, используя этот метод?

Когда я пытаюсь изменить пароль, я получаю следующий ответ: {"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Access to change password operation is denied."},...}}

Для обновления другой информации о пользователе и сброса пароля отлично работает.

Ответы [ 4 ]

1 голос
/ 21 февраля 2020

На самом деле пользователь B2 C может изменить свой пароль. Получите стандартный (не B2 C) токен доступа AAD с scope = Directory.AccessAsUser.All , используя ваш upn (обычно что-то вроде objectid@b2ctenantfullname, , которое вы можете получить этот запрос AAD Graph тоже) и вызовите ChangeUserPassword api. Это будет работать.

0 голосов
/ 29 января 2020

Я полагаю, что метод GraphClient.ChangeUserPassword вызывает действие changePassword , которое позволяет только зарегистрированному пользователю изменять собственный пароль.

Это невозможно для Azure AD B2 C пользователя локальной учетной записи.

Вместо этого необходимо PATCH свойство passwordProfile для объекта пользователя , например:

PATCH https://graph.windows.net/myorganization/users/{user_id}?api-version=1.6
Content-Type: application/json

{
  "passwordProfile": {
    "forceChangePasswordNextLogin": false,
    "password": "Test1234"
  }
}

Обратите внимание, что важно установить для свойства forceChangePasswordNextLogin значение false , иначе пользователь локальной учетной записи не сможет войти в .

0 голосов
/ 13 февраля 2020

Я смог установить новый пароль для пользователя со следующим кодом

public async Task SetUserPassword(string userId)
{
    var toUpdate = await _activeDirectoryClient.Users.GetByObjectId(userId).ExecuteAsync();
    toUpdate.PasswordProfile = new PasswordProfile
    {
        Password = "test!345G",
        ForceChangePasswordNextLogin = false
    };
    await toUpdate.UpdateAsync();
}
0 голосов
/ 27 января 2020

Согласно этому , вы предоставили вашему приложению роль администратора пользователя? Это дает вашему приложению возможность удалять пользователей или обновлять пароли.

...