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

使用Invoke-WebRequest获取无用户密码的有效Token权限问题排查

Azure AD Client Credentials Token无权限问题解决

关键遗漏配置及修复步骤

1. 应用权限未完成管理员同意

你已经添加了Directory.Read.All和Group.Read.All应用权限,但这类权限必须经过租户管理员授予同意才会生效。client_credentials模式下,未授权的权限不会被包含在Token中。

操作路径:

  • 登录Azure AD门户 → 应用注册 → 选中你的应用 → 进入「API权限」页面
  • 点击页面顶部的「授予[你的租户名称]的管理员同意」按钮
  • 在确认弹窗中确认权限列表,完成同意操作

2. Scope参数配置错误

你当前的Scope指向自定义API的.default范围,但Directory.Read.All和Group.Read.All是Microsoft Graph的应用权限,因此client_credentials模式下的Scope需要指定Graph的资源:

$response = Invoke-WebRequest -Uri "https://login.microsoftonline.com/TenantID/oauth2/v2.0/token" -Method Post -Body @{
    grant_type = "client_credentials"
    client_id = ""
    client_secret = ""
    scope = "https://graph.microsoft.com/.default"
}
$token = (ConvertFrom-Json $response.Content).access_token

注意:openid和offline_access是委派权限相关的范围,不适用于应用身份的client_credentials模式,直接移除即可。

3. 验证Token有效性

获取Token后,可将其复制到jwt.ms(本地解析,无需上传数据)查看roles声明,确认是否包含Directory.Read.All和Group.Read.All。如果没有,说明权限未正确注入,需重新检查管理员同意状态和Scope配置。

补充说明

如果你的操作目标是自定义API而非Microsoft Graph,需要额外完成:

  • 在自定义API的「公开API」区域配置对应的应用权限范围(当前仅配置了委派的user_impersonation,无法支持应用权限)
  • 确保自定义API的应用权限已被授予管理员同意
  • 继续使用自定义API的.defaultScope

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:43:16