Azure AD: изменение пароля пользователя из пользовательского приложения

В нашей компании мы используем несколько LDAP, в том числе Azure AD для Office365, Google и OpenLDAP — внутренний.

Мы работаем над чем-то вроде независимого лицевого веб-интерфейса, где пользователи смогут изменять некоторые свои данные, включая пароль, любые изменения, сделанные пользователем, должны автоматически обновляться и реплицироваться во всех трех LDAP.

Для этого я использую собственный скрипт Python, однако у меня возникли проблемы с Azure AD, и он не позволяет мне изменить пароль.

Я могу просматривать всех пользователей и их данные, но не могу изменить пароль. Когда я делаю запрос на аутентификацию, он отвечает мне разрешениями, которые были предоставлены моему приложению:

scope = Directory.Read Directory.ReadWrite.All Directory.Write offline_access recipient.manage User.ReadWrite User.ReadWrite.All user_impersonation UserProfile.Read

Однако ответ сервера:

{"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."}}}

Итак, как я вижу, «Directory.ReadWrite.All» недостаточно, у меня также есть «UserProfile.Read», но не «UserProfile.Write». Я не нашел никаких настроек в конфигурации приложения, которые позволили бы мне получить этот доступ

Это все мои разрешения для приложений:

Разрешение приложения Azure AD

Немного кода Python:

graphusersurl = GRAPH_API_URL % (TENANT_ID, 'users/<User_ObjectID>', API_VER)
graphheaders={'Authorization': "%s %s" % (TOKEN_TYPE_VALUE, access_token),
          'Content-Type': 'application/json',
         }

passworddata = {
    "passwordProfile":
        { "password":'<NEW_USER_PASSWORD>', 
          "forceChangePasswordNextLogin":False
        }
}

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


person Briksins    schedule 05.08.2015    source источник


Ответы (1)


Судя по сообщению об ошибке, проблема возникает из-за того, что пользователи с любой из организационных ролей «Администратор» не являются членами «Администратора компании» или «Администратора учетной записи пользователя» в административных ролях Office 365.

{"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Недостаточно прав для завершения операции."}}}

Чтобы решить эту проблему, обратитесь к базе знаний, в которой представлены решения: https://support.microsoft.com/en-us/kb/3004133. Я процитировал ключевые сообщения здесь для вашего быстрого ознакомления:

Пожалуйста, добавьте свое приложение в «Администратор компании» в административных ролях Office 365. Для этого выполните все следующие командлеты модуля Azure AD для Windows PowerShell (MSOL):

#-----------------------------------------------------------
   # This will prompt you for your tenant's credential
   # You should be able to use your your Azure AD administrative user name
   # (in the [email protected] format)
   #-----------------------------------------------------------
   Connect-MsolService

   #-----------------------------------------------------------
   # Replace the Application Name with the name of your 
   # Application Service Principal
   #-----------------------------------------------------------
   $displayName = "Application Name"
   $objectId = (Get-MsolServicePrincipal -SearchString $displayName).ObjectId

   #-----------------------------------------------------------
   # This will add your Application Service Prinicpal to 
   # the Company Administrator role
   #-----------------------------------------------------------
   $roleName = "Company Administator"              
   Add-MsolRoleMember -RoleName $roleName -RoleMemberType ServicePrincipal -RoleMemberObjectId $objectId

Кроме того, вы должны добавить свое приложение в «Администратор учетной записи пользователя» в административных ролях Office 365, если пользователь Azure AD имеет какую-либо из следующих организационных ролей «Администратор»:

• Глобальный администратор

• Администратор выставления счетов

• Администратор службы

Для этого запустите все следующие командлеты MSOL:

#-----------------------------------------------------------
   # This will prompt you for your tenant's credential
   # You should be able to use your your Azure AD administrative user name
   # (in the [email protected] format)
   #-----------------------------------------------------------
   Connect-MsolService

   #-----------------------------------------------------------
   # Replace the Application Name with the name of your 
   # Application Service Principal
   #-----------------------------------------------------------
   $displayName = "Application Name"
   $objectId = (Get-MsolServicePrincipal -SearchString $displayName).ObjectId

   #-----------------------------------------------------------
   # This will add your Application Service Principal to 
   # the Company Administrator role
   #-----------------------------------------------------------
   $roleName = "User Account Administator"  
   Add-MsolRoleMember -RoleName $roleName -RoleMemberType ServicePrincipal -RoleMemberObjectId $objectId

После запуска обоих наборов командлетов ваше приложение сможет изменить пароль для всех организационных ролей «Администратор».

Обратите внимание, что применение разрешений к субъекту службы приложений может занять до 30 минут после добавления разрешений к административным ролям Office 365.

Если у вас есть какие-либо другие проблемы, пожалуйста, сообщите нам об этом.

person Ming Xu - MSFT    schedule 14.08.2015