Microsoft 365 的高容量电子邮件的 OAuth 身份验证

了解如何使用 OAuth 身份验证与 SMTP 协议连接,以及访问Office 365用户的电子邮件数据。

Microsoft 365 ((包括Office web 版) 和 Outlook.com 用户)都支持下面所述的对 SMTP 协议的 OAuth2 支持。

如果不熟悉 OAuth 2.0 协议,请参阅Microsoft 标识平台概述上的 OAuth 2.0 协议。 有关Microsoft身份验证库 (MSAL) 的详细信息,这些库实现 OAuth 2.0 协议对用户进行身份验证并访问安全 API,请参阅 MSAL 概述

注册应用程序

若要使用 OAuth,必须使用 Microsoft Entra 注册应用程序。

按照使用 Microsoft 标识平台注册应用程序中列出的说明创建新的应用程序。

  1. 至少以云应用程序管理员身份登录到Microsoft Entra 管理中心

  2. 浏览到“标识>应用程序”>应用注册并选择“新建注册”。

    新注册的屏幕截图。

  3. 输入应用程序的显示名称。 应用程序的用户在使用应用时(例如在登录期间)可能会看到显示名称。 可以随时更改显示名称,多个应用注册可以共享同一名称。 应用注册自动生成的应用程序 (客户端) ID(而不是其显示名称)在标识平台中唯一标识你的应用。

    注册应用程序的屏幕截图。

  4. 注册后,会创建多个 ID,稍后需要其中一些 ID 才能获取 OAuth 2.0 令牌。

    多个 ID 的屏幕截图。

添加 API 权限

  1. 在左侧菜单下,选择“ API 权限 ”,然后选择“ 添加权限”。

    hveoauth api 权限的屏幕截图。

  2. 导航到组织使用的 API 并搜索Office 365 Exchange Online

    我的组织使用的 API 的屏幕截图。

  3. “请求 API 权限”下,依次选择“ 应用程序权限”、“ Mail.Send”和“ 添加权限”。

  4. 添加 API 权限后,管理员需要选择“ 授予管理员同意”。

    授予管理员同意的屏幕截图。

我们同时支持:委托权限和应用程序权限,以允许旧版 OAuth 第三方应用程序,因为它们将应用程序权限用于应用机密。

委托权限:

  1. 在“API 权限”选项卡中,从 Office 365 Exchange Online\委托权限添加 Mail.Send API 权限。
  2. “API 权限 ”选项卡中,选择“ 授予管理员同意”。
  3. 在“ 身份验证 ”选项卡中,启用 “允许公共客户端流”。
  4. 使用 HVE 邮件用户的凭据 为受众 https://outlook.office.com/.default请求令牌。

应用程序权限:

  1. 在“API 权限”选项卡中,从 Office 365 Exchange Online\应用程序权限添加 Mail.Send API 权限。
  2. “API 权限 ”选项卡中,选择“ 授予管理员同意”。
  3. 在“ 证书 & 机密 ”选项卡中,添加新的客户端密码。
  4. 使用 客户端密码 请求访问群体 https://outlook.office.com/.default的令牌。

HVE SMTP 协议交换

若要对 SMTP 服务器连接进行身份验证,客户端必须使用格式的AUTHSASL XOAUTH2命令进行响应。 SASL XOAUTH2 使用以下格式将用户名和访问令牌编码在一起:

base64("user=" + userName + "^Aauth=Bearer " + accessToken + "^A^A") 

^A 表示 Control + A (%x01) 。

例如,SASL XOAUTH2使用访问令牌EwBAAl3BAAUFFpUAo7J3Ve0bjLBWZWCclRC3EoAA访问application@contoso.onmicrosoft.com的格式为:

base64("user=application@contoso.onmicrosoft.com^Aauth=Bearer EwBAAl3BAAUFFpUAo7J3Ve0bjLBWZWCclRC3EoAA^A^A") 

导致身份验证成功的示例客户端-服务器消息交换:

[connection begins]

C: auth xoauth2

S: 334

C: dXNlcj1hcHBsaWNhdGlvbkBjb250b3NvLm9ubWljcm9zb2Z0LmNvbQFBdXRoPUJlYXJlciBFd0JBQWwzQkFBVUZGcFVBbzdKM1ZlMGJqTEJXWldDY2xSQzNFb0FBAQE=

S: 235 2.7.0 Authentication successful

[connection continues...]

导致身份验证失败的示例客户端-服务器消息交换:

[connection begins]

C: auth xoauth2

S: 334

C: dXNlcj1hcHBsaWNhdGlvbkBjb250b3NvLm9ubWljcm9zb2Z0LmNvbQFBdXRoPUJlYXJlciBFd0JBQWwzQkFBVUZGcFVBbzdKM1ZlMGJqTEJXWldDY2xSQzNFb0FBAQE=

S: 535 5.7.3 Authentication unsuccessful