解决 Microsoft Graph 授权错误
授权错误可能是由多个不同的问题造成的,其中大多数问题会产生 403 错误(有几个例外)。 例如,以下情况可能会导致授权错误:
若要解决常见授权错误,请尝试针对与你遇到的错误最接近的错误描述的步骤。 可能会出现多个错误。 你还可以查看 Microsoft Q&A 上已有的 401 错误和 403 错误相关的答案。 如果找不到问题的解决方案,请在 Microsoft Q&A 上提出一个新问题 ,并使用 microsoft-graph*进行标记。
请确保你的应用程序在请求中向 Microsoft Graph 提供有效的访问令牌。 此错误通常意味着 HTTP 身份验证请求标头中可能缺少访问令牌,或者令牌无效或已过期。 强烈建议使用 Microsoft 身份验证库 (MSAL) 获取访问令牌。 此外,如果你尝试使用授予个人 Microsoft 帐户的委派访问令牌来访问仅支持工作或学校帐户(组织帐户)的 API,则可能会发生此错误。
根据您的应用调用的 Microsoft Graph API,验证你是否请求了正确的权限集。 所有 Microsoft Graph API 方法参考文章中都提供了建议的最低特权权限。 此外,用户或管理员必须向应用程序授予这些权限。 授予权限通常通过同意页或使用Microsoft Entra 管理中心应用程序注册边栏选项卡授予权限。
确保请求或授予的权限类型与你的应用获取的访问令牌类型相匹配。 你可能正在请求和授予应用程序权限,但使用的是委派的交互式代码流令牌而不是客户端凭据流令牌,或者正在请求和授予委派权限,但使用的是客户端凭据流令牌而不是委派的代码流令牌。
- 代表用户获取访问权限和委派权限
- Azure AD v2.0 - OAuth 2.0 授权代码流
- 在没有用户的情况下获取访问权限(守护程序服务)和应用程序权限
- Azure AD v2.0 - OAuth 2.0 客户端凭据流
目前,没有允许重置用户密码的应用程序权限守护程序服务到服务权限。 这些 API 仅支持对登录的管理员使用交互式委派代码流。
对于委派代码流,Microsoft Graph 将根据向应用授予的权限以及登录用户具有的权限来评估是否允许请求。 通常,此错误表示用户没有足够的特权执行请求或者用户没有获得所访问数据的许可。 只有具有所需权限或许可证的用户才能成功发出请求。
API 服务(如 Microsoft Graph)检查接收的访问令牌中的 aud 声明 (audience) 是否与预期值匹配,如果不匹配,则会导致 403 Forbidden
错误。 导致此错误的常见错误是尝试使用为 Azure AD Graph API、Outlook API 或 SharePoint/OneDrive API 获取的令牌调用 Microsoft Graph(或反之)。 确保你的应用为其获取令牌的资源(或范围)与应用调用的 API 匹配。
根据组织的 CA 策略,通过你的应用访问 Microsoft Graph 资源的用户可能会被要求提供附加信息,而这些信息在你的应用最初获取的访问令牌中并不存在。 在这种情况下,你的应用在获取访问令牌期间会收到 400 以及 interaction_required 错误,或者在调用 Microsoft Graph 时收到 403 以及 insufficient_claims 错误。 在这两种情况下,错误响应都包含可呈现给授权终结点的附加信息,以便向用户质询其他信息(如多重身份验证或设备注册)。
许多Microsoft Graph API 访问 Exchange Online。 这些 API 受 Exchange Online 的 EWS 应用程序策略的约束。 应用程序可能会收到 403 Forbidden
以下响应正文的错误。
{
"error": {
"code": "ErrorAccessDenied",
"message": "Access to OData is disabled."
}
}
这可能是由组织的 EWS 访问策略引起的。 Exchange 管理员可以使用 Exchange Online PowerShell 模块对此进行检查。
若要确定是否应用组织范围的策略,请执行以下操作:
Get-OrganizationConfig | fl EwsApplicationAccessPolicy,EWS*List
若要确定是否应用特定于用户的策略,请执行以下操作:
Get-CASMailbox <user-principal-name> | fl EwsApplicationAccessPolicy,EWS*List
如果设置了 EwsApplicationAccessPolicy ,则应用策略。
- 如果
EwsApplicationAccessPolicy
设置为EnforceAllowList
,则必须将应用程序的User-Agent
值添加到 EwsAllowList 值。 - 如果
EwsApplicationAccessPolicy
设置为EnforceBlockList
,则必须从 EwsBlockList 值中删除应用程序User-Agent
的值。
备注
对 EWS 应用程序策略的更改需要一段时间才能生效。 更改后,应用程序可能会在一段时间内继续收到 403 Forbidden
错误。
查看应用程序无法访问的组所拥有的任何组。 如果有嵌套组,其中父组(将其他组作为成员拥有的组)具有应用程序可以访问的足够权限,但子组(属于另一组的成员的组)没有,则会导致访问子组和父组失败。
在某些情况下,由于权限不足,应用可能无法读取组或服务主体。 即使应用以前能够读取这些包含权限不足的嵌套组或服务主体的组,由于Microsoft安全强化的进步,也可能发生此故障。