我正在尝试通过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中手动重置密码。任何帮助或建议,我们将不胜感激。
答案 0 :(得分:0)
根据您的描述,假设您要通过Graph API更新用户密码。
根据this document,当我们更新passwordProfile属性时,需要以下权限:Directory.AccessAsUser.All
。
根据我的测试,我们可以使用以下步骤修改某人的密码:
通过遵循此文档授予许可。
检查配置文件中的密码是否满足passwordPolicies属性指定的最低要求。
使用以下请求更新某人的密码。
请求网址:
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
范围。有一些重要的警告与此范围有关:
这是一个委托范围,因此只有在使用授权码或隐式OAuth流时才可以请求它。不能与客户端凭据一起使用。
在用户同意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