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

使用Microsoft Graph Python获取用户许可证信息时遇403授权错误

问题:Microsoft Graph Python SDK获取用户许可证信息时遭遇403授权错误

我正在使用Microsoft Graph Python SDK获取用户许可证信息,代码如下:
license_details = await graph_client.users.by_user_id(user_id).license_details.get()

但持续抛出授权错误,响应信息为:

APIError
  Code: 403
  message: None
  error: MainError(additional_data={}, code='Authorization_RequestDenied', details=None, inner_error=InnerError(additional_data={}, client_request_id='a0dc5684-d627-477b-af2c-1d264039e6de', date=DateTime(2024, 11, 13, 5, 59, 28, tzinfo=Timezone('UTC')), odata_type=None, request_id='f503re17-615b-46f4-afce-fc02bda244a2'), message='Insufficient privileges to complete the operation.', target=None)

我的应用已获得User.Read.All和Directory.Read.All等必要权限的管理员同意,且使用了正确凭据,但错误仍存在。我需要获取用户许可证详情,却收到403授权错误,是否需要额外权限?Azure AD应用配置是否存在问题?


解决方案

针对你遇到的403权限不足问题,可从以下几个方向排查:

1. 确认权限类型是否正确

获取用户许可证详情所需的User.Read.All或Directory.Read.All权限,必须是应用权限而非委托权限。若你之前配置的是委托权限,即使完成了管理员同意,以应用身份调用时仍会触发权限不足错误。

检查Azure AD应用权限配置:

  • 进入Azure门户 → Azure AD → 应用注册 → 目标应用 → 权限 → 配置权限 → Microsoft Graph
  • 确认添加的是应用权限类型的权限,而非委托权限
  • 验证权限列表中显示“已授予”状态(完成管理员同意后的标识)

2. 验证令牌包含的权限

解析获取到的access token,检查是否包含所需的应用权限:

  • 使用Python的jwt库解码令牌,查看roles字段
  • 若roles中没有Directory.Read.All或User.Read.All,说明权限未生效,需重新完成管理员同意并刷新令牌

3. 确认身份验证流程正确

应用权限仅适用于客户端凭据流(Client Credentials Flow),若使用授权码流等委托流,即使配置了应用权限也无法生效。确保你的Graph客户端初始化使用客户端凭据流:

from azure.identity import ClientSecretCredential
from msgraph import GraphServiceClient

credential = ClientSecretCredential(
    tenant_id="你的租户ID",
    client_id="你的客户端ID",
    client_secret="你的客户端密钥"
)
graph_client = GraphServiceClient(credential)

4. 检查用户对象限制

如果仅获取特定用户的许可证,确认:

  • 该用户未被禁用
  • 跨租户场景下,应用已获得目标租户的权限授权

5. 等待权限同步

管理员同意权限后,Azure AD可能需要几分钟到几十分钟的同步时间,可等待一段时间后重试请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:32:39