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

如何在用户上下文下调用MS Graph API实现用户密码修改

授权问题解决方案

你遇到的无用户同意界面的场景可以通过租户管理员预授权解决:

  • 进入注册的AAD应用的「API权限」配置页,找到已添加的Delegated类型UserAuthenticationMethod.ReadWrite.All权限,点击「授予管理员同意」,完成后该权限对租户内所有用户生效,后续调用无需再弹出用户同意界面。
  • 如果你的场景是管理员代用户重置密码(无需用户提供旧密码),可以直接申请Application类型的UserAuthenticationMethod.ReadWrite.All权限,同样授予管理员同意后,服务端可以直接调用接口操作所有用户的密码,不需要获取用户身份的委托令牌。

代码调整方案

你现有的调用代码本身没有问题,只需要调整SimpleAuthProvider的实现和令牌获取逻辑即可:

  1. 委托权限场景(用户自己改密码,需验证旧密码)
    • 先通过授权码流获取对应用户的访问令牌,令牌中需要包含UserAuthenticationMethod.ReadWrite.All的权限声明
    • SimpleAuthProvider仅需要在每个Graph请求的Header中添加Authorization: Bearer {有效访问令牌}即可
    • 注意:请求中的myUserId必须和访问令牌对应的用户ID完全一致,否则会触发权限报错
  2. 应用权限场景(管理员代重置密码,无需旧密码)
    • 用客户端凭据流获取AAD应用的访问令牌,调用密码重置接口即可,示例代码如下:
var client = new GraphServiceClient(new SimpleAuthProvider(appAccessToken));
await client.Users[myUserId]
    .Authentication
    // 固定ID对应密码类型的认证方法
    .Methods["28c10230-6103-485e-b985-444c60001490"]
    .ResetPassword(newPassword, false)
    .Request()
    .PostAsync();

额外注意事项

  • 访问令牌默认有效期为1小时,需要实现令牌自动刷新逻辑,不要硬编码固定令牌
  • 若使用B2C租户,需要确保AAD应用的受众配置包含你的B2C租户域名,否则令牌会被Graph API拒绝

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:45:03