Microsoft Graph API Password Reset принимает только нулевой пароль - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь сбросить пароль другого пользователя через Graph API (в частности, graph.windows.net, хотя такое же поведение происходит и при использовании graph.microsoft.com).

Я считаю, что все средства безопасности работают правильнонастроить.Регистрация приложения имеет разрешения Directory.ReadWrite.All, а субъект службы является глобальным администратором.Нет ошибок относительно недостаточных привилегий, но всякий раз, когда я пытаюсь ввести пароль в профиле пароля, я получаю сообщение об ошибке.

Запрос PATCH на

https://graph.windows.net/{tenant_id}/users/{userPrincipalName}?api-version=1.6

со следующим телом дает мне ответ 204.

{ 
    "passwordProfile": {
        "password": null,
        "forceChangePasswordNextSignIn": true 
    }
}

Но тот же запрос с паролем "P @ ssword1" или любым другим действительным паролем возвращает 400 неверных запросовс сообщением «Одно или несколько свойств содержат недопустимые значения.»

Кто-нибудь сталкивался с чем-либо подобным?Это учетные записи, синхронизируемые из локальной AD, но в Azure включен сброс пароля, и вы можете вручную сбросить пароли в AAD.Любая помощь или совет высоко ценится.

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Вы звоните не по адресу, graph.windows.net - это устаревший API-интерфейс Azure AD Graph. API-интерфейсы Microsoft Graph расположены по адресу graph.microsoft.com. Хотя эти API похожи по функциям, они вызывают паттерны очень разные.

Как упоминалось в kikang, для изменения пароля пользователя необходимо запросить область действия Directory.AccessAsUser.All. Есть несколько важных cavetes с этой областью:

  1. Это делегированная область, поэтому ее можно запрашивать только при использовании кода авторизации или неявных потоков OAuth. Его нельзя использовать с учетными данными клиента.

  2. Прежде чем пользователь может дать согласие на Director.AccessAsUser.All, вы должны сначала получить согласие администратора от администратора на клиенте / экземпляре AAD пользователя.

После того, как вы согласитесь с необходимыми областями, вам нужно выдать PATCH ресурсу /user.

Ваш звонок будет выглядеть примерно так:

PATCH https://graph.microsoft.com/v1.0/me
Content-type: application/json

{
  "passwordProfile": {
    "forceChangePasswordNextSignIn": true,
    "password": "A-Strong-Password"
  }
}
0 голосов
/ 25 сентября 2018

Оказывается, это была проблема с настройкой синхронизации AD в их среде. Очевидно, что федеративный домен, синхронизирующийся с Azure AD, блокирует возможность сброса паролей через API Graph, но сообщения об ошибках не сообщают вам о проблеме с разрешениями.

Это описание здесь при неподдерживаемых операциях, моя проблема не заключалась в понимании полной настройки среды AD: https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-sspr-writeback

0 голосов
/ 11 сентября 2018

Согласно вашему описанию, я предполагаю, что вы хотите обновить пароль пользователя через Graph API.

Согласно этому документу , когда мы обновляем свойство passwordProfile, требуется следующее разрешение: Directory.AccessAsUser.All.

На основании моего теста мы можем изменить чей-либо пароль, выполнив следующие действия:

  1. Предоставьте разрешение, следуя этому документу.

  2. Проверьте пароль в профиле на соответствие минимальным требованиям, указанным в свойстве passwordPolicies.

  3. Используйте следующий запрос для обновления чьего-либо пароля.

URL запроса:

PATCH /users/{id | userPrincipalName}

И тело запроса:

{ "passwordProfile": { "forceChangePasswordNextSignIn": true, "password": "P@assword1" } }

В случае успеха этот запрос возвращает код ответа 204. Нет содержимого.

...