You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用应用权限通过Microsoft Graph API更新Azure AD密码遇403权限不足

解决Microsoft Graph API应用权限修改用户密码的403权限不足问题

你遇到的这个问题其实是应用权限与委派权限的权限体系差异导致的——委派权限里的Directory.AccessAsUser.All确实能让你以当前用户身份修改其他用户密码,但这个权限本身就是专为委派场景设计的,应用权限体系里并没有对应的镜像权限。不过别担心,应用权限下有其他方式实现修改用户密码的需求,我给你梳理一下关键解决步骤:

1. 选择正确的应用权限

应用权限场景下,修改用户密码需要以下两个权限之一(遵循最小权限原则选其一即可):

  • User.ReadWrite.All:允许应用读取和修改所有用户的属性,包括密码配置
  • Directory.ReadWrite.All:权限范围更大,可管理整个目录的所有对象,一般不建议用这个,除非你有其他目录级管理需求

注意:这两个都是高权限,必须由Azure AD全局管理员给你的应用注册授予管理员同意,否则权限不会生效。

2. 验证权限配置是否到位

登录Azure门户,找到你的应用注册,进入「API权限」页面:

  • 确认已经添加了上述其中一个应用权限
  • 确认权限状态显示为「已授予管理员同意(你的租户名称)」
  • 获取访问令牌时,确保请求的scope是https://graph.microsoft.com/.default(应用权限场景必须用这个固定scope)

3. 必要时分配目录角色

如果你的目标用户是管理员账号(比如全局管理员),仅仅有应用权限还不够,你需要给应用的服务主体分配对应的目录角色:

  • 可分配密码管理员角色:专门负责重置用户密码,权限刚好匹配需求
  • 或者用户管理员角色:能管理所有用户的属性和密码

分配路径:Azure AD → 角色和管理员 → 找到对应角色 → 添加分配 → 选择你的应用服务主体

4. 验证令牌和请求细节

  • 解码你的Bearer令牌,检查roles声明里是否包含你授予的权限(比如User.ReadWrite.All),同时确认aud字段是https://graph.microsoft.com
  • 确保你的密码符合租户的密码策略(比如长度、复杂度、是否包含特殊字符等),你的示例密码password00++看起来没问题,但最好和租户的密码规则对齐

你的请求格式本身是正确的,这里再贴一下供参考:

PATCH https://graph.microsoft.com/v1.0/users/somebody@sandboxnice.onmicrosoft.com
Authorization: Bearer [token]
Content-type: application/json
{
"passwordProfile": {
"forceChangePasswordNextSignIn": false,
"password": "password00++"
}
}

按照上面的步骤配置后,应该就能成功返回204状态码了。

内容的提问来源于stack exchange,提问作者Ziga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:20:35