首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Microsoft帐户密码从php更新为Organization

将Microsoft帐户密码从php更新为Organization
EN

Stack Overflow用户
提问于 2020-04-30 17:24:56
回答 1查看 212关注 0票数 0

目前,我正在尝试将用户在我的网站上使用的密码(简单Php和Mysql)与我为他们创建的Microsoft帐户的密码同步。基本上,他们都有一个带有随机密码的{user_id}@mydomain.com帐户,如果他们想要使用它,他们基本上会在我网站客户端的一个专用页面上重新输入他们的密码,这样我就可以调用API并用他们自己的密码来更新随机密码。

  • 我在没有登录用户的情况下工作(原因很明显)
  • 我已经正确设置了所需的“应用程序权限”:User.ReadWrite.All、User.ManageIdentities.All、Directory.ReadWrite.All

但是,它说我没有足够的权限:

代码语言:javascript
复制
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" } } }

这是我目前用于更新密码的代码,以防有帮助:

代码语言:javascript
复制
$password = array(
                    'forceChangePasswordNextSignIn' => false,
                    'forceChangePasswordNextSignInWithMfa' => false,
                    'password' => $_POST['password']
                );

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

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

我还保留了对patch_microsoft_graph()函数的引用:

代码语言:javascript
复制
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);
        }

有人能帮忙吗?提前感谢

EN

回答 1

Stack Overflow用户

发布于 2020-04-30 21:56:46

  • 下面是API调用的相关文件。因此,只需确保您设置了正确的权限(无论您是使用Application还是根据文档使用委托权限)。
  • 另外,请检查您用于更新密码的帐户是否指定了任何角色。例如,在更新passwordProfile属性时,需要以下权限: Directory.AccessAsUser.All。如果您正在更新另一个用户的businessPhones、mobilePhone或otherMails属性,则只允许非管理员用户或指定以下角色之一的用户使用:目录阅读器、来宾邀请者、消息中心阅读器和报表阅读器。有关详细信息,请参阅Azure AD可用角色中的Helpdesk (密码)管理员。对于授予User.ReadWrite.All或Directory.ReadWrite.All委托或应用程序权限的应用程序,情况就是如此。

试一下上面的内容,让我知道它是如何进行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61529259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档