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

调用Graph API创建日历事件时遭遇403 Forbidden权限拒绝问题

问题解答:Graph API创建日历事件403权限拒绝及权限范围问题

一、权限拒绝的原因

你的403错误直接原因是访问令牌中缺少Calendar.ReadWrite权限范围。Graph API在处理请求时会校验令牌内的权限,没有对应权限就会返回"Access is denied"。虽然你在Azure应用注册中添加了该权限,但令牌里没包含,说明权限没有被正确获取到。

二、如何添加Calendar相关权限范围

按以下步骤操作:

  1. 确认权限已授予管理员同意
    登录Azure门户,进入你的应用注册,找到「API权限」页面,检查Calendar.ReadWrite(Delegated类型)权限的状态是否为「已授予<租户名>管理员同意」。如果是「需要管理员同意」,点击「授予管理员同意」按钮完成授权(需租户管理员权限)。

  2. 在代码中显式指定权限范围
    在ASP.NET Core的身份验证配置中,必须明确声明需要获取的Graph API权限范围,否则不会自动包含Calendar相关权限。
    示例代码:

    // 在Program.cs中配置身份验证和Graph服务
    builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration)
        .EnableTokenAcquisitionToCallDownstreamApi(
            new[] { "Calendar.ReadWrite", "OnlineMeetings.ReadWrite" }) // 显式添加所需权限
        .AddMicrosoftGraph(builder.Configuration.GetSection("Graph"))
        .AddInMemoryTokenCaches();
    

    或者在appsettings.json的Graph配置中补充scopes:

    "Graph": {
      "BaseUrl": "https://graph.microsoft.com/v1.0",
      "Scopes": "Calendar.ReadWrite OnlineMeetings.ReadWrite Chat.ReadWrite" // 包含你需要的所有权限
    }
    
  3. 让用户重新登录
    旧的访问令牌不会自动更新权限,需要用户退出应用后重新登录,新获取的令牌才会包含Calendar.ReadWrite权限。

三、未显式指定的权限为何出现在scp中

这些权限的来源分为两类:

  • OpenID Connect默认权限:openid、profile、email、User.Read是身份验证流程中默认请求的基础权限,用于获取用户身份信息,不需要显式配置就会被包含。
  • 已授权的其他权限:Chat.Create、Chat.Read等权限,应该是你在应用注册中曾经添加过,并且已经授予了管理员同意。即使代码中没显式指定,只要权限已授权,在获取令牌时会自动包含这些已同意的Delegated权限。

内容的提问来源于stack exchange,提问作者g.pickardou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:16:08