Обновите пароль учетной записи Microsoft Azure с php как Организация - PullRequest
0 голосов
/ 30 апреля 2020

В настоящее время я пытаюсь синхронизировать c пароль, который пользователь использует на моем веб-сайте (простые Php и Mysql), с паролем учетной записи в Microsoft, которую я создал для них. Таким образом, в основном все они имеют учетную запись enjuser_idcasts@mydomain.com со случайным паролем, и если они хотят использовать его, они в основном повторно вводят свой пароль на специальной странице в клиентской области моего сайта. , чтобы я сделал вызов API и обновил случайный пароль своим собственным.

  • Я работаю без авторизованного пользователя (по понятным причинам)
  • Я правильно установил до необходимых «прав доступа к приложению»: User.ReadWrite.All, User.ManageIdentities.All, Directory.ReadWrite.All

НО, он говорит, что мне не хватает permissions:

array(1) { ["error"]=> array(3) { ["code"]=> string(27) "Authorization_RequestDenied" ["message"]=> string(50) "Insufficient privileges to complete the operation." ["innerError"]=> array(2) { ["request-id"]=> string(36) "acb8b9c7-6a63-4157-8c92-de5f49a69ac8" ["date"]=> string(19) "2020-04-30T17:13:04" } } }

Это код, который я сейчас использую для обновления пароля, если это помогает:

$password = array(
                    'forceChangePasswordNextSignIn' => false,
                    'forceChangePasswordNextSignInWithMfa' => false,
                    'password' => $_POST['password']
                );

                $data = array(
                    'passwordProfile' => $password
                );

                $updatePassword = patch_microsoft_graph('users/'.$userID,$data,true);

Я также оставляю вам ссылку на функцию patch_microsoft_graph () :

function patch_microsoft_graph($scope,$data,$object) {

            $access_token = get_microsoft_access_token();

            if(!$scope) {
                return 'no $scope';
            }


            $payload = json_encode($data);


            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL,"https://graph.microsoft.com/v1.0/$scope");
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
            curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded"));
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

            $headers = [
                "Authorization: $access_token",
                "Host: graph.microsoft.com",
                "Content-Type: application/json",
                "Accept: application/json"
            ];

            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

            $server_output = curl_exec($ch);

            curl_close ($ch);

            return json_decode($server_output,$object);
        }

Может кто-нибудь помочь? Заранее спасибо

1 Ответ

0 голосов
/ 01 мая 2020
  • Вот документация, связанная с для вызова API. Поэтому просто убедитесь, что вы установили правильные разрешения (независимо от того, используете ли вы приложение или делегированные разрешения в соответствии с документом).
  • Также проверьте, имеет ли учетная запись, используемая для обновления пароля, какие-либо роли. назначены. Скажем, при обновлении свойства passwordProfile требуется следующее разрешение: Directory.AccessAsUser.All. В случае, если вы обновляете свойство businessPhones, mobilePhone или otherMails другого пользователя, это разрешено только для пользователей, которые не являются администраторами или которым назначена одна из следующих ролей: читатели каталогов, приглашающий, читатель центра сообщений и читатель отчетов. Для получения дополнительной информации см. Администратор службы поддержки (пароль) в Azure AD доступные роли . Это касается приложений, которым предоставлены права доступа User.ReadWrite.All или Directory.ReadWrite.All или приложения.

Попробуйте описанное выше и дайте мне знать, как оно работает.

...