使用客户端凭据调用MS Graph API服务主体同步作业接口返回401未授权
问题根因
你当前授予的应用权限不满足目标接口的权限要求,是触发401错误的核心原因:
- 调用
GET /servicePrincipals/{id}/synchronization/jobs接口,应用权限场景下必须配置Synchronization.Read.All或Synchronization.ReadWrite.All的应用程序权限,你当前配置的Directory.ReadWrite.All、Application.ReadWrite.OwnedBy两个权限不支持访问该同步作业相关的接口。 - 你能正常调用不带后缀的服务主体查询接口,是因为
Directory.ReadWrite.All确实覆盖了服务主体基础信息的查询权限,和同步相关子路径的权限要求是相互独立的。 - Graph Explorer调用成功是因为它走的是委托权限流,你登录的账号本身有Azure AD管理员权限,走委托权限时
Directory.ReadWrite.All等管理员权限可以覆盖同步作业的查询,和客户端凭据流的应用权限校验规则不同,所以会出现两端调用结果不一致的情况。
修复步骤
- 进入Azure Portal的应用注册页面,找到你当前使用的应用,在「API权限」-「添加权限」-「Microsoft Graph」-「应用程序权限」中,搜索并勾选
Synchronization.Read.All(只读场景)或Synchronization.ReadWrite.All(需要修改同步配置的场景)。 - 点击「授予管理员同意」完成权限授权,等待2-3分钟让权限生效。
- 重新请求访问令牌,再调用目标接口即可正常返回结果。
内容的提问来源于stack exchange,提问作者iteal
相关产品推荐
相关产品推荐

