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

如何基于应用权限认证重构O365邮箱附件下载C#应用

改造C# EWS应用为App-Only认证方案

1. 安装依赖包

  • 安装Microsoft.Identity.Client NuGet包,用于生成OAuth 2.0令牌
  • 确保Microsoft.Exchange.WebServices包为最新稳定版本(推荐EWS Managed API 2.2及以上)

2. 替换配置参数

将原有的账号密码配置替换为Azure AD应用注册的信息,从配置文件读取:

string clientId = ConfigurationManager.AppSettings["AppID"].ToString();
string clientSecret = ConfigurationManager.AppSettings["ClientSecret"].ToString();
string tenantId = ConfigurationManager.AppSettings["TenantID"].ToString();
string targetMailbox = ConfigurationManager.AppSettings["TargetMailbox"].ToString(); // 需要访问的O365邮箱地址

3. 获取App-Only访问令牌

使用MSAL库生成针对EWS的应用权限令牌:

var confidentialClient = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithClientSecret(clientSecret)
    .WithTenantId(tenantId)
    .Build();

// EWS的应用权限范围固定为https://outlook.office365.com/.default
var ewsScopes = new[] { "https://outlook.office365.com/.default" };
var authResult = await confidentialClient.AcquireTokenForClient(ewsScopes).ExecuteAsync();
string accessToken = authResult.AccessToken;

4. 重构ExchangeService初始化逻辑

替换原有的基础认证代码,改用OAuth令牌认证:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var exchange = new exch.ExchangeService(exch.ExchangeVersion.Exchange2010_SP1)
{
    Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx"),
    EnableScpLookup = false
};

// 设置OAuth令牌
exchange.Credentials = new exch.OAuthCredentials(accessToken);
// App-Only模式必须指定要访问的具体邮箱
exchange.ImpersonatedUserId = new exch.ImpersonatedUserId(exch.ConnectingIdType.SmtpAddress, targetMailbox);

// 验证连接:绑定收件箱
exch.Folder inbox = exch.Folder.Bind(exchange, exch.WellKnownFolderName.Inbox);

5. 核心注意事项

  • 权限校验:确认Azure AD应用已被授予Exchange.ManageAsApp应用权限,且全局管理员已完成权限同意
  • 邮箱指定:App-Only模式无法默认访问任意邮箱,必须通过ImpersonatedUserId明确指定目标邮箱地址
  • 令牌刷新:访问令牌有效期为1小时,需在过期前重新获取,建议实现令牌缓存机制避免重复请求
  • 版本兼容:若租户为新版O365,建议将ExchangeVersion升级为Exchange2016或ExchangeOnline,提升API兼容性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:28:23