使用应用权限创建CallRecords订阅时Graph API认证失败
问题根因分析
你碰到的403报错、令牌缺失对应权限声明的核心原因是客户端凭证流请求配置错误,或租户侧应用凭据匹配异常,目前可排除应用注册侧的基础权限配置问题:Postman可正常调用说明你拿到的应用注册本身的CallRecords.Read.All应用权限、管理员同意配置都是有效的。
具体排查&解决步骤
1. 核对令牌请求的核心参数
客户端凭证流请求令牌时必须严格匹配以下配置,逐一检查你的自研代码、Azure Functions身份验证逻辑:
- 请求端点必须为客户租户专属端点:
https://login.microsoftonline.com/{客户实际租户ID}/oauth2/v2.0/token,禁止使用/common等通用端点 - POST请求的form参数必须包含以下字段:
grant_type固定取值为client_credentialsclient_id取值为你拿到的应用注册客户端ID,和Postman配置的ID完全一致client_secret取值为应用注册的有效密钥,未过期scope固定取值为https://graph.microsoft.com/.default,禁止单独填写CallRecords.Read.All作为scope:应用权限场景下只有填.default后缀的scope,才会自动拉取所有管理员已同意的应用权限到令牌中。
额外提示:你之前观察到的Postman令牌中
scp字段的权限属于委托权限,应用权限对应的权限声明会出现在令牌的roles字段中,不要混淆两个字段的作用。
2. 排除AADSTS7000112错误影响
该错误代表应用对应的服务主体在客户租户被禁用,Postman可正常调用说明你代码/函数中使用的凭据大概率和Postman使用的不一致:
- 确认代码中使用的
client_id、租户ID和Postman配置的完全一致,不要混用不同应用的凭据 - 如果确认凭据一致,联系客户租户管理员进入Azure AD企业应用页面,搜索对应
client_id,确认应用启用状态为正常。
3. 令牌有效性校验
调整配置后重新获取令牌,解析后确认令牌包含以下信息即可正常调用接口:
roles字段中存在CallRecords.Read.Allaud字段取值为https://graph.microsoft.comtid字段取值为客户的实际租户ID
内容的提问来源于stack exchange,提问作者ingo_ww
相关产品推荐
相关产品推荐

