You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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
排查方案
  • 检查应用权限配置
    1. 登录Azure门户找到对应应用注册,进入「API权限」页面,确认已添加Calendars.Read权限。如果是租户内应用,需确保权限已完成管理员同意;如果是用户级授权,确认用户在授权流程中同意了该权限。
    2. 区分委托权限和应用权限:调用/me端点需要委托权限,若使用客户端凭据模式(无用户上下文),必须改用/users/{user-id}/calendar/events端点,并配置应用权限的Calendars.Read。
  • 验证Token权限范围
    解码获取到的MonToken,查看scp字段是否包含Calendars.Read。如果没有,说明授权时Scope未正确获取,需检查授权流程中用户是否同意了该权限,或Scope参数是否正确传递。
  • 确认端点与权限模式匹配
    若你获取地点列表和用户信息用的是应用权限(客户端凭据模式),而日历用的是委托权限(用户上下文),两种模式不能混用。比如客户端凭据模式下无法使用/me端点,必须指定具体用户ID。
  • 检查用户日历访问权限
    确认授权的用户账号本身没有被Exchange管理员限制日历访问权限,确保用户能正常在Outlook中查看自己的日历。

内容的提问来源于stack exchange,提问作者trabelsi eya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:25:30