Microsoft Graph API密码重置仅接受空密码

时间:2018-09-10 16:46:00

标签: azure-active-directory microsoft-graph

我正在尝试通过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 :(得分:0)

根据您的描述,假设您要通过Graph API更新用户密码。

根据this document,当我们更新passwordProfile属性时,需要以下权限:Directory.AccessAsUser.All

根据我的测试,我们可以使用以下步骤修改某人的密码:

  1. 通过遵循此文档授予许可。

  2. 检查配置文件中的密码是否满足passwordPolicies属性指定的最低要求。

  3. 使用以下请求更新某人的密码。

请求网址:

PATCH /users/{id | userPrincipalName}

和请求正文:

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

如果成功,此请求将返回204 No Content响应代码。

答案 1 :(得分:0)

您输入的URL错误,graph.windows.net是旧版Azure AD Graph API。 Microsoft Graph API位于graph.microsoft.com。尽管这些API在功能上相似,但它们所调用的模式却大不相同。

正如kikang所述,要更改用户密码,您需要请求Directory.AccessAsUser.All范围。有一些重要的警告与此范围有关:

  1. 这是一个委托范围,因此只有在使用授权码或隐式OAuth流时才可以请求它。不能与客户端凭据一起使用。

  2. 在用户同意Director.AccessAsUser.All之前,您必须首先从用户的AAD租户/实例的管理员处获得管理员同意。

一旦您同意了适当的范围,就需要向/user资源发布PATCH

您的通话将类似于以下内容:

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

{
  "passwordProfile": {
    "forceChangePasswordNextSignIn": true,
    "password": "A-Strong-Password"
  }
}

答案 2 :(得分:0)

事实证明这是在他们的环境中如何设置AD同步的问题。显然,与Azure AD同步的联合域锁定了通过Graph API重置密码的功能,但错误消息并未告诉您其权限问题。

此处是在不受支持的操作下的概述,我的问题是不了解完整的AD环境设置:https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-sspr-writeback