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

使用EWS与OAuth读取邮箱时遭遇403 Forbidden错误求助

EWS新式身份认证返回403 Forbidden问题排查

问题描述

微软弃用EWS基本身份认证后,更新应用支持新式身份认证,但调用EWS接口始终返回403 Forbidden错误。相关代码及权限配置如下:

代码实现

var cca = ConfidentialClientApplicationBuilder
    .Create("AppId")
    .WithClientSecret("ClientSecret")
    .WithTenantId("TenantId")
    .Build(); 

var ewsScopes = new string[] { "https://outlook.office365.com/.default" };
var emailToBeRead = "test@test.com";
try
{
    var authResult = cca.AcquireTokenForClient(ewsScopes)
        .ExecuteAsync().Result;

    // Configure the ExchangeService with the access token
    var ewsClient = new ExchangeService
    {
        Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx"),
        Credentials = new OAuthCredentials(authResult.AccessToken),
        ImpersonatedUserId =
        new ImpersonatedUserId(ConnectingIdType.SmtpAddress, emailToBeRead)
    };

    //Include x-anchormailbox header
    ewsClient.HttpHeaders.Add("X-AnchorMailbox", emailToBeRead);

    // Make an EWS call
    var folders = ewsClient.FindFolders(WellKnownFolderName.MsgFolderRoot, new FolderView(10));
    foreach (var folder in folders)
    {
        Console.WriteLine($"Folder: {folder.DisplayName}");
    }
}
catch (MsalException ex)
{
    Console.WriteLine($"Error acquiring access token: {ex}");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex}");
}

权限配置

应用权限配置截图

排查与解决步骤

  • 确认权限已获得管理员同意:截图中配置的EWS.AccessAsApp是应用权限,必须由全局管理员在Azure AD中授予管理员同意。进入Azure AD应用注册→权限配置页,检查该权限的状态是否为“已授予[租户名]的管理员同意”,未同意的话点击“授予管理员同意”按钮完成授权。

  • 在Exchange Online中配置应用访问策略:仅在Azure AD中添加权限不够,还需通过PowerShell为应用分配目标邮箱的访问权限:

    # 连接Exchange Online PowerShell
    Connect-ExchangeOnline
    
    # 允许应用访问指定邮箱
    New-ApplicationAccessPolicy -AppId <你的应用AppId> -PolicyScopeGroupId test@test.com -AccessRight AllowAccess -Description "允许应用访问test@test.com邮箱"
    

    若需访问多个邮箱,可创建安全组并添加目标邮箱,将PolicyScopeGroupId替换为安全组的邮箱地址或对象ID。

  • 调整代码中的身份认证配置:使用EWS.AccessAsApp应用权限时,无需设置ImpersonatedUserId(该属性用于用户权限下的模拟场景),可移除代码中ImpersonatedUserId的赋值,保留X-AnchorMailbox头即可。

  • 验证访问令牌的有效性:将获取到的access token复制到jwt.ms解析,检查roles字段是否包含EWS.AccessAsApp。若不存在,说明权限未正确同步,需重新授予管理员同意或等待权限生效。

  • 检查租户全局应用访问策略:确认租户未配置全局阻止应用访问邮箱的策略,可通过以下命令查看:

    Get-ApplicationAccessPolicy
    

    若存在限制策略,需调整策略确保目标邮箱或应用在允许范围内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:10:39