从后台服务访问Outlook Calendar Graph API遇权限拒绝问题求助
问题:无用户参与访问多目录及个人账号Outlook日历权限错误
背景
开发一款包含SPA与后端的Web应用,需全天候无用户参与地访问并修改来自多目录及个人账号的用户Outlook日历。
已完成的配置
- 创建支持「任意组织目录账号(多租户Microsoft Entra ID)及个人Microsoft账号」的AAD应用注册;
- 设置RedirectURI为SPA基础URL并创建密钥;
- 基于MSAL(
msal-browser)实现SPA认证,授权请求链接:https://login.microsoftonline.com/common/oauth2/v2.0/authorize?scope=https://graph.microsoft.com/Calendars.ReadWrite+openid+profile+offline_access&response_type=code&client_id=my_client_id.. - 用户成功认证并授权后,账号状态正常;
- 从id token的
tid声明中获取tenantId; - 通过访问
https://graph.microsoft.com/v1.0/me/events成功验证access_token有效性及权限配置; - 使用client_credentials flow成功获取access_token,请求命令:
curl --location 'https://login.microsoftonline.com/tenantId_from_step_5/oauth2/v2.0/token' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'client_id=clientId_from_step1' --data-urlencode 'scope=https://graph.microsoft.com/.default' --data-urlencode 'client_secret=secret_from_step2' --data-urlencode 'grant_type=client_credentials'
遇到的错误
使用上述client_credentials flow获取的access_token访问https://graph.microsoft.com/v1.0/users/my_test_user@outlook.com/events时,返回错误:
{ "error": { "code": "ErrorAccessDenied", "message": "Access is denied. Check credentials and try again." } }
更新信息
- 通过credential_flow获取的JWT Token(请求地址:
https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/oauth2/v2.0/token)缺少roles(权限)声明; - 个人账号均共用tenantId:
9188040d-6c67-4c5b-b112-36a304b66dad; - Azure Portal中应用(
outlook-sync-dev)的权限配置已按要求添加。
请求帮助
目前陷入困境,恳请提供解决该权限问题的建议与方案。
内容的提问来源于stack exchange,提问作者monofilm
相关产品推荐
相关产品推荐

