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

第三方邮件应用未注册Azure AD如何访问Exchange数据?

第三方邮件应用访问Exchange数据的权限逻辑及.NET Framework开发方案

为什么三星邮箱不用在你的Azure AD租户注册?

三星这类主流邮件应用属于微软全局预注册的公共客户端应用,它们的应用注册信息由微软统一管理,不会出现在单个租户的「已注册应用」列表里。用户授权时,微软会验证这类应用的合法性,允许它们通过OAuth 2.0的公共客户端流程获取访问令牌,进而访问Exchange数据。

自己开发C#/.NET Framework应用的解决方案

你开发的应用必须在Azure AD中注册(公共客户端类型),才能合法通过OAuth访问Exchange数据,具体步骤如下:

1. 在Azure AD注册公共客户端应用

  • 登录Azure门户,进入Azure AD → 应用注册 → 新注册
  • 填写应用名称,选择「账户类型」(根据需求选「任何组织目录中的账户和个人Microsoft账户」或仅限租户内)
  • 重定向URI选择「公共客户端(移动和桌面)」,可填https://login.microsoftonline.com/common/oauth2/nativeclient(通用公共客户端回调地址)
  • 完成注册后,记录应用的客户端ID

2. 配置API权限

  • 在注册的应用中,进入「API权限」→ 添加权限 → 选择「Microsoft Graph」
  • 选择「委托权限」,添加Exchange相关权限,比如:
    • Mail.Read(读取邮件)
    • Calendars.Read(读取日历)
    • Mail.Send(发送邮件,若需要)
  • 点击「授予管理员同意」(租户内应用需管理员操作;个人账户用户授权时自动同意)

3. 在.NET Framework代码中实现认证与数据访问

使用**MSAL.NET(Microsoft.Identity.Client)**库处理OAuth认证,结合Microsoft Graph SDK访问Exchange数据:

安装NuGet包

Install-Package Microsoft.Identity.Client
Install-Package Microsoft.Graph

示例代码

using Microsoft.Identity.Client;
using Microsoft.Graph;
using System;
using System.Threading.Tasks;

class ExchangeDataAccess
{
    private static readonly string ClientId = "你的应用客户端ID";
    private static readonly string[] Scopes = new[] { "Mail.Read", "Calendars.Read" };

    public static async Task GetExchangeData()
    {
        // 初始化公共客户端应用
        var pca = PublicClientApplicationBuilder
            .Create(ClientId)
            .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
            .Build();

        // 设备授权流:输出设备码,引导用户在浏览器完成授权
        var result = await pca.AcquireTokenWithDeviceCode(Scopes, deviceCodeResult =>
        {
            Console.WriteLine(deviceCodeResult.Message);
            return Task.FromResult(0);
        }).ExecuteAsync();

        // 初始化Graph客户端
        var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) =>
        {
            requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken);
            return Task.CompletedTask;
        }));

        // 读取前10封邮件
        var messages = await graphClient.Me.Messages.Request().Top(10).GetAsync();
        foreach (var message in messages)
        {
            Console.WriteLine($"邮件主题:{message.Subject}");
        }

        // 读取前10个日历事件
        var events = await graphClient.Me.Events.Request().Top(10).GetAsync();
        foreach (var ev in events)
        {
            Console.WriteLine($"日历事件:{ev.Subject}");
        }
    }
}

关键说明

  • 设备授权流适合无UI或桌面应用,用户需在浏览器输入设备码完成授权
  • 带UI的桌面应用可使用授权码流(带PKCE),MSAL.NET会自动处理PKCE流程
  • .NET Framework 4.6.1及以上版本支持MSAL.NET,无需担心兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:10:49