调用Microsoft Graph获取日历遇“访问被拒绝”错误求助
问题描述
我尝试用以下代码调用Microsoft Graph接口获取邮箱账户的日历,但持续收到“Access is denied. Check credentials and try again”错误。目前可正常获取地点列表及用户信息,唯独无法获取日历,相关代码如下:
gsO365_ClientID est une chaîne = "..." gsO365_ClientSecret est une chaîne = ".." dGdO365_ClientSecret_Expiration est une Date = ".." gsO365_Tenant est une chaîne = ".." gsO365_URICallBack_WEB est une chaîne = "http://localhost/inscription/WD260AWP/WD260Awp.exe/OAUTH2_RETOUR" gsO365_URICallBack_WEB_Test est une chaîne = "http://localhost/WD250AWP/WD250Awp.exe/OAUTH2_RETOUR" sGsO365_URICallBack_APP est une chaîne = ".." OAuth2Params est OAuth2Paramètres OAuth2Params..ClientID = gsO365_ClientID OAuth2Params..URLAuth = "https://login.microsoftonline.com/[%gsO365_Tenant%]/oauth2/v2.0/authorize" OAuth2Params..URLToken = "https://login.microsoftonline.com/[%gsO365_Tenant%]/oauth2/v2.0/token" OAuth2Params..ParamètresSupplémentaires = "force_reapprove=false" OAuth2Params..Scope = "offline_access Calendars.Read" MonToken est un AuthToken = AuthIdentifie(OAuth2Params) oRequête est une httpRequête oRequête.Méthode = httpGet oRequête.URL = "https://graph.microsoft.com/v1.0/me/calendar/events" oRequête.ContentType = "application/json" oRequête.AuthToken = MonToken Réponse est une httpRéponse jsRéponse est un JSON Réponse = HTTPEnvoie(oRequête) SI ErreurDétectée ALORS Erreur("La requête HTTP à Office 365 a échouée"+RC+ErreurInfo()) RENVOYER Faux SINON jsRéponse = Réponse..Contenu Trace(Réponse..Contenu) // Le serveur a renvoyé une erreur SI jsRéponse.Error..Existe ALORS Erreur("La requête à Office 365 a échouée"+RC+jsRéponse.Error.Message) SINON Trace(jsRéponse) FIN FIN
排查方案
- 检查应用权限配置
- 登录Azure门户找到对应应用注册,进入「API权限」页面,确认已添加
Calendars.Read权限。如果是租户内应用,需确保权限已完成管理员同意;如果是用户级授权,确认用户在授权流程中同意了该权限。 - 区分委托权限和应用权限:调用
/me端点需要委托权限,若使用客户端凭据模式(无用户上下文),必须改用/users/{user-id}/calendar/events端点,并配置应用权限的Calendars.Read。
- 登录Azure门户找到对应应用注册,进入「API权限」页面,确认已添加
- 验证Token权限范围
解码获取到的MonToken,查看scp字段是否包含Calendars.Read。如果没有,说明授权时Scope未正确获取,需检查授权流程中用户是否同意了该权限,或Scope参数是否正确传递。 - 确认端点与权限模式匹配
若你获取地点列表和用户信息用的是应用权限(客户端凭据模式),而日历用的是委托权限(用户上下文),两种模式不能混用。比如客户端凭据模式下无法使用/me端点,必须指定具体用户ID。 - 检查用户日历访问权限
确认授权的用户账号本身没有被Exchange管理员限制日历访问权限,确保用户能正常在Outlook中查看自己的日历。
内容的提问来源于stack exchange,提问作者trabelsi eya
相关产品推荐
相关产品推荐

