Как обновить пароль пользователя в azure объявлении с помощью Graph API - PullRequest
0 голосов
/ 03 апреля 2020

Я использую Microsoft graph API для обновления пароля пользователя. У меня ниже json запрос:

{
    "accountEnabled": true,
    "userPrincipalName": "testuser34@mytenantname.onmicrosoft.com",
    "passwordProfile": {
        "forceChangePasswordNextSignIn": false,
        "password": "<new_password>"
    }
}

Я называю это url https://graph.microsoft.com/v1.0/users/testuser34@mytenantname.onmicrosoft.com, используя PATCH метод. Я также передаю маркер носителя в качестве заголовка авторизации, но получаю ошибку ниже:

{
  "error": {
    "code": "Authorization_RequestDenied",
    "message": "Insufficient privileges to complete the operation.",
    "innerError": {
      "request-id": "12781f2a-0cdd-449d-94d7-aae1440a7559",
      "date": "2020-04-03T02:52:57"
    }
  }
}

Ошибка говорит Insufficient privileges. В соответствии с этой страницей Я следую, там написано:

When updating the passwordProfile property, the following permission is required: Directory.AccessAsUser.All.

Я проверил это в созданном приложении, и это разрешение есть при регистрации приложения

enter image description here

Но я все еще получаю эту ошибку. Может кто-нибудь, пожалуйста, помогите решить эту ошибку. Спасибо

Редактировать: также добавлено разрешение в Microsoft, но все еще появляется та же ошибка

enter image description here

РЕДАКТИРОВАТЬ 2:

Ниже приведен код, из которого я получаю токен:

data = {    
            "grant_type": "client_credentials",
            "client_secret": <client_secret>,
            "client_id": <client_id>,
            "resource": "https://graph.microsoft.com"
       }

r = requests.post("https://login.microsoftonline.com/<tennant_id>/oauth2/token", data)

if r.status_code == 200:
    ret_body = r.json()
    token = ret_body['access_token']
else:
    log.error("Unable to get token from oauth {}, {}".format(r.status_code, r.json()))

Edit3:

Я также добавил имя приложения в администраторе пользователя:

enter image description here

Но проблема остается прежней.

1 Ответ

1 голос
/ 03 апреля 2020

Вы используете Microsoft Graph, поэтому вам нужно добавить разрешение в Microsoft Graph вместо Azure Active Directory Graph. enter image description here

Обновление:

Вы используете поток учетных данных клиента , при использовании этого потока, Application permission необходим, если вы хотите получить токен для обновления passwordProfile, необходимо Делегированное разрешение Directory.AccessAsUser.All, чтобы обновить пользователя с помощью Application permission, мы могли бы просто добавить Directory.ReadWrite.All максимум, но это разрешение не может reset user passwords.

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

enter image description here

Затем см. Примечания для Directory.ReadWrite.All:

Directory.ReadWrite.All

Решение:

Чтобы использовать поток учетных данных клиента для обновления passwordProfile, добавьте субъект-службу своего приложения AD в качестве роли каталога в Azure AD.

Перейдите к Azure Active Directory на портале -> Roles and administrators -> User administrator -> Add assignments -> поиск по имени вашего приложения AD -> Add.

Затем получите токен для вызова API, все работает нормально:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...