目录

简介

先决条件

要求

使用的组件

配置

网络图

配置

验证

故障排除

排除连接故障

简介

本文档介绍ISE中的OAuth 2.0配置，以通过Microsoft Exchange Online Mail SMTP服务器启用邮件通信。

先决条件

要求

思科建议您了解思科身份服务引擎(ISE)、简单邮件传输协议(SMTP)服务器功能和OAuth授权的基本知识。

使用的组件

ISE版本3.5 P1（3.2补丁8、3.3补丁8、3.4补丁4也支持此功能）

访问Microsoft EntraID和Microsoft 365管理中心

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

配置

本节介绍Microsoft Entra ID和ISE上的配置，以支持用于以下目的的邮件通知：

- 向任何内部管理员用户发送电子邮件警报通知，同时启用邮件中包含系统警报选项。要配置发件人邮件地址，请单击“管理”>“系统”>“设”>“设置”>“警报设置”>“警报通知”，然后键入在Microsoft 365管理中心下配置的邮件地址

- 发起人向访客发送电子邮件通知及其登录凭证和密码重置说明。对于访客和发起人流，发件人邮件在工作中心 > 访客接入 > 设置 > 访客邮件设置 > >默认“发件人”邮件地址下配置为在Microsoft 365管理中心下配置的邮件地址

- 使访客在成功注册自身后自动接收其登录凭证，并在访客帐户过期之前执行操作。

- 在密码到期日期之前，向ISE上配置的ISE管理员用户/内部网络用户发送提醒电子邮件。

发送邮件的ISE节点

电子邮件的目的

发送电子邮件的节点

访客访问过期

主策略管理节点(PAN)

警报

主动监控和故障排除节点(PMnT)

访客门户和发起人门户的发起人和访客通知

策略服务节点(PSN)

密码过期

主PAN

网络图

要将OAuth与ISE配合使用，需要3个步骤：

1.使用Microsoft Entra ID注册ISE应用

2.从令牌服务器(IDP)获取访问令牌

3.使用访问令牌验证与SMTP服务器的连接请求。

配置

步骤 1：创建用户电子邮件帐户

从Microsoft 365管理中心在您的注册域中创建用户电子邮件帐户。此处使用用户名no-reply创建示例帐户，以连接EntraID应用并从ISE发送电子邮件。

1. 导航到Users > Active users和Add a user以从ISE发送电子邮件。

2. 设置基本信息：添加用户的名字和姓氏、显示名称、FQDN和密码，然后点击下一步。

3. 选择location并为用户分配产品许可证(Microsoft 365 E5 Developer)，然后点击Next

添加用户

4.在Optional Settings下，分配角色用户（无管理中心访问权限）

5.复查并单击完成添加。

6.选择此用户帐户可访问Microsoft 365电子邮件的应用：在Microsoft 365管理中心上，转到Users > Active users >选择用户帐户，然后单击Mail。在Email apps > Manage email apps下。确保还与其他应用一起选择了Authenticated SMTP。

管理电子邮件应用

步骤2：在Microsoft Entra ID中注册ISE应用

1. 使用具有活动订阅的MS Azure帐户登录到Microsoft Entra管理中心，该帐户必须至少是应用程序开发员。

2. 浏览到Entra ID。搜索App registrations服务，然后单击New Registration

3. 为您的应用输入有意义的Name，并在Supported account types下，指定可以使用应用的人员，选择“Single tenant only-your EntraID tenant”并单击Register以完成应用注册。

注册应用程序

4.此时将显示应用概述页。记录应用程序（客户端）ID，用于唯一标识您的应用。还有您的目录（租户）ID，将在ISE SMTP配置中使用。

应用注册详细信息

5.现在将应用程序凭据添加到此MS Entra应用程序，以安全地验证自身并访问Web API，而无需用户交互。

1. 在新注册的应用程序中，浏览到Manage > Certificates & secrets。在Client secrets下，单击New client secret。在Add a client secret下输入Description并设置Expiration duration，然后单击Add。

2. 请注意，除了在创建后立即查看外，无法查看Client secret Value。请务必在创建时保存密钥，然后再离开页面。

3. 同时记下关键的失效日期。

应用客户端密钥配置

6.当用户/管理员授予应用程序权限时，这些应用程序有权调用API。现在将SMTP权限添加到MS Entra应用程序。

1. 在新注册的应用程序中，浏览到Manage > API permissions。选择“添加权限”。

2. 选择我的组织使用的API并搜索“Office 365 Exchange Online”。

3. 单击应用权限。

4. 对于SMTP访问，请选择SMTP.SendAsApp权限。

5. 此权限需要租户管理员同意。单击Grant admin consent for <tenant name>

向应用程序分配API权限

Note: User.Read Permission for Microsoft Graph is added by default (No Admin consent for the tenant)

7. Exchange中的服务主体用于使应用程序能够通过使用SMTP、POP和IMAP协议的客户端凭据流访问Exchange邮箱。

租户管理员同意您的Microsoft Entra应用后，管理员必须通过Exchange Online PowerShell在Exchange中注册您的Entra应用服务主体。此注册由New-ServicePrincipal cmdlet启用。

1. 安装Powershell（如果尚未安装在笔记本电脑上）

abc@abc-M-506L ~ % brew install --cask powershell

abc@abc-M-506L ~ % sh

sh-3.2$ brew update

sh-3.2$ brew upgrade powershell

安装Powershell

II.要使用New-ServicePrincipal cmdlet，请安装ExchangeOnlineManagement并连接到您的租户，如片断所示：

sh-3.2$ pwsh

PowerShell 7.5.4

PS/Users/abc> Install-Module -Name ExchangeOnlineManagement

PS/Users/abc> Import-module ExchangeOnlineManagement

PS/Users/abc> Connect-ExchangeOnline -Organization xxxxxxxx-xxxx-xxxx-xxxx-xxxxx999be76 ---->Directory (tenant) ID

连接到Exchange Online租户

三、在Exchange中注册Microsoft Entra应用服务主体。使用AppID和ObjectID [OBJECT_ID是来自企业应用程序节点（Azure门户）的“概述”(Overview)页面的“对象ID”(Object ID)进行应用程序注册。它不是App Registrations节点的Overview页面中的Object ID。使用错误的对象ID会导致身份验证失败]。

PS/Users/abc> New-ServicePrincipal -AppId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxx6a953e -ObjectId b10axxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

在Exchange中注册Entra应用程序服务主体

四。  使用Get-ServicePrincipal cmdlet验证已注册的服务主体标识符

PS/Users/abc> Get-ServicePrincipal | fl

验证注册的服务主体标识符

五。  租户管理员现在可以在租户中添加允许您的应用程序访问的特定邮箱。此配置是使用Add-MailboxPermission cmdlet完成的。

PS/Users/abc> Add-MailboxPermission -Identity "no-reply@abcdef.onmicrosoft.com" -User b10aa0dx-xxxx-xxxx-xxxx-xxxxxxe189bb -AccessRights FullAccess

添加邮箱权限以访问应用程序

现在，Microsoft Entra应用程序可以使用OAuth 2.0客户端凭证授权流程，通过SMTP、POP或IMAP协议访问允许的邮箱。

步骤 3：通过MS Exchange Online OAuth配置ISE SMTP用户身份验证

要配置简单邮件传输协议(SMTP)服务器，请点击菜单图标()并选择Administration > System > Settings > SMTP Server。配置字段。

- 在SMTP Server Settings区域中：

- SMTP服务器:smtp.office365.com

- SMTP端口:587

- 连接超时:60 秒

- 在Authentication Settings区域中，使用切换开关启用Use Authentication Settings选项。

选择MS Exchange Online OAuth:输入这些值以配置Microsoft Exchange Online OAuth。

- 在用户名字段中，输入Exchange Online用户名的完整电子邮件地址。

- 在客户端ID字段中，输入Azure Entra ID应用程序的客户端ID。

- 在租户ID字段中，输入Azure Entra ID应用程序的租户ID。

- 在Client Secret字段中，输入Azure Entra ID应用程序的客户端密码。

- 在Expiry Date字段中，输入客户端密钥的到期日期。

根据此配置触发客户端密钥到期警报。

- 将自动填充OAuth令牌终端API 和作用域文件。

只有在测试连接操作成功后才能保存配置。

成功测试与SMTP服务器的连接

Note: To protect sensitive customer data, these configurations are excluded from Backup and Restore operations

验证

要验证，请配置访客邮件设置。导航到工作中心 > 访客接入 > 访客邮件设置。选择Enable email notifications to guests，并配置和Save的第1步中配置的无应答帐户的Default 'From'邮件地址。

更改访客邮件设置

通过导航到工作中心(Work Centers)>访客接入(Guest Access)>门户和组件(Portal & Components)>访客门户(Guest Portals)>自注册访客门户(Self-Registered Guest Portal)（默认）>门户页面定制(Portal Page Customization)>通知(Notifications)>邮件(Email)来发送测试电子邮件。

在预览窗格右侧下，单击Settings > Send Test Email，然后单击Send。

来自自助注册门户的测试电子邮件

您的Outlook必须收到来自验证步骤1中配置的无应答帐户的邮件。屏幕截图中的示例电子邮件。

Outlook中接收的示例电子邮件

Guest.log at debug level:

2026-02-02 05:17:34,608 INFO   [admin-http-pool139][[]] cpm.guestaccess.apiservices.util.SmtpMsgRetryThreadUtil -::admin:::- sendMailMessage: Submitting Mail Job............

2026-02-02 05:17:34,608 INFO   [admin-http-pool139][[]] cpm.guestaccess.apiservices.util.SmtpMsgRetryThreadUtil -::admin:::- submitMailMsgJob: SMTP server FQDN ==> smtp.office365.com

2026-02-02 05:17:34,609 INFO   [admin-http-pool139][[]] cpm.guestaccess.apiservices.util.SmtpMsgRetryThreadUtil -::admin:::- sendMailMessage: Time taken for Submitting mail job is 1 Milli seconds.

2026-02-02 05:17:34,609 INFO   [admin-http-pool139][[]] cpm.guestaccess.apiservices.util.SmtpMsgRetryThreadUtil -::admin:::- sendMailMessage: Calling Future.get....

2026-02-02 05:17:34,609 INFO   [GUEST_ACCESS_SMTP_RETRY_THREAD][[]] cpm.guestaccess.apiservices.util.SmtpMsgRetryThreadUtil -:::::- submitMailMsgJob: Creating transport object...

2026-02-02 05:17:39,365 INFO   [GUEST_ACCESS_SMTP_RETRY_THREAD][[]] cpm.guestaccess.apiservices.util.SmtpMsgRetryThreadUtil -:::::- submitMailMsgJob: Time taken for transport.sendMessage() call is 4756 Milli Seconds.

2026-02-02 05:17:39,365 INFO   [admin-http-pool139][[]] cpm.guestaccess.apiservices.util.SmtpMsgRetryThreadUtil -::admin:::- sendMailMessage: Future.get status: success Time taken for Future.get method call is 4756 Milliseconds.

此外，通过保证人管理员将用户凭证重新发送给访客用户，从保证人门户进行测试。

从发起人门户进行测试

向访客用户发送凭证

访客用户接收的示例电子邮件：

向访客用户发送电子邮件通知

故障排除

首先检查客户端密钥到期的警报。与SMTP OAuth客户端密钥相关的新警报将在ISE中添加。

要进一步排除故障，请根据您正在排除的问题在PAN、PSN或PMnT节点上启用调试日志。

- 日志记录组件：guest-access-admin， guestaccess

- 日志文件:guest.log

测试连接操作

2026-02-02 05:58:21,501 DEBUG [MnT-AlarmWorkerMail-Threadpool-0][[]] cpm.guestaccess.apiservices.util.SmtpSession -:::::- SMTP settings : Username : null Port : 587 timeout : 60 isSSLEnabled: false isAuthEnabled false Server: smtp.office365.com

2026-02-02 05:58:21,501 DEBUG [MnT-AlarmWorkerMail-Threadpool-0][[]] cpm.guestaccess.apiservices.util.SmtpSession -:::::- Setting MailSessionProperties

2026-02-02 05:58:21,501 DEBUG [MnT-AlarmWorkerMail-Threadpool-0][[]] cpm.guestaccess.apiservices.util.SmtpSession -:::::- Set the FQDN : sa-ise35-1.poongarg.local

2026-02-02 05:58:21,513 DEBUG [MnT-AlarmWorkerMail-Threadpool-0][[]] cpm.guestaccess.apiservices.util.SmtpSession -:::::- SMTP settings : Username : null Port : 587 timeout : 60 isSSLEnabled: false isAuthEnabled false Server: smtp.office365.com

2026-02-02 05:58:21,513 DEBUG [MnT-AlarmWorkerMail-Threadpool-0][[]] cpm.guestaccess.apiservices.util.SmtpSession -:::::- Setting MailSessionProperties

2026-02-02 05:58:21,513 DEBUG [MnT-AlarmWorkerMail-Threadpool-0][[]] cpm.guestaccess.apiservices.util.SmtpSession -:::::- Set the FQDN : sa-ise35-1.poongarg.local

2026-02-02 05:59:14,872 DEBUG [admin-http-pool136][[]] cpm.admin.guestaccess.action.SmtpServerSettingsAction -::admin:::- inside smtpServerSettings testConnection

2026-02-02 05:59:14,872 DEBUG [admin-http-pool136][[]] cpm.admin.guestaccess.action.SmtpServerSettingsAction -::admin:::- smtpServerSecureSettings testConnection

2026-02-02 05:59:15,630 DEBUG [admin-http-pool136][[]] cpm.guestaccess.apiservices.oauth.OauthTokenCache -::admin:::- Putting value in OAuth Cache (accessToken, expiry) ..

2026-02-02 05:59:15,630 DEBUG [admin-http-pool136][[]] cpm.guestaccess.apiservices.oauth.ExchangeOnlineProvider -::admin:::- Access token acquired (no caching in this method)

2026-02-02 05:59:15,630 DEBUG [admin-http-pool136][[]] cpm.guestaccess.apiservices.oauth.OauthTokenCache -::admin:::- Putting value in OAuth Cache (accessToken, expiry) ..

2026-02-02 05:59:20,146 DEBUG [admin-http-pool136][[]] cpm.guestaccess.apiservices.util.SmtpSession -::admin:::- Successfully created mail session and connected to mail server.

2026-02-02 05:59:20,146 DEBUG [admin-http-pool136][[]] cpm.admin.guestaccess.action.SmtpServerSettingsAction -::admin:::- Successfully connected to smtp.office365.com.

保存操作

2026-02-02 05:54:07,337 DEBUG [admin-http-pool129][[]] cpm.admin.guestaccess.action.SmtpServerSettingsAction -::admin:::- inside smtpServerSettings editSubmit

2026-02-02 05:54:07,337 DEBUG [admin-http-pool129][[]] cpm.admin.guestaccess.action.SmtpServerSettingsAction -::admin:::- smtpServerSettings in editSubmit

2026-02-02 05:54:07,339 DEBUG [admin-http-pool129][[]] cpm.admin.guestaccess.action.SmtpServerSettingsAction -::admin:::- Set SMTP Server is :smtp.office365.com

2026-02-02 05:54:07,339 DEBUG [admin-http-pool129][[]] cpm.admin.guestaccess.action.SmtpServerSettingsAction -::admin:::- Set SMTP port is :587

2026-02-02 05:54:07,339 DEBUG [admin-http-pool129][[]] cpm.admin.guestaccess.action.SmtpServerSettingsAction -::admin:::- Set Connection Timout is :60

2026-02-02 05:54:07,339 DEBUG [admin-http-pool129][[]] cpm.admin.guestaccess.action.SmtpServerSettingsAction -::admin:::- Set TLS/SSL config is :false

2026-02-02 05:54:07,339 DEBUG [admin-http-pool129][[]] cpm.admin.guestaccess.action.SmtpServerSettingsAction -::admin:::- Set Authentication config is :false

2026-02-02 05:54:07,357 DEBUG [admin-http-pool129][[]] cpm.admin.guestaccess.action.SmtpServerSettingsAction -::admin:::- SMTP server settings successfully saved

排除连接故障

1. GUI错误：连接到smtp.office365.con失败。

连接超时错误

2026-02-09 03:24:58,658 ERROR [admin-http-pool11][[]] cpm.guestaccess.apiservices.util.SmtpSession -::admin:::- MessagingException : com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.office365.com, 587; timeout 60000;

nested exception is:

java.net.SocketTimeoutException: connect timed out

Guest.log显示连接超时。需要修复代理配置才能解决此问题。

2. GUI错误：无效的OAuth终结点或租户标识符 — 自行解释。需要检查租户ID。

3.客户端密钥无效 — 相同，需要验证客户端密钥值

无效的客户端加密错误

4.电子邮件地址无效 — 请确保服务原则配置正确。

无效的电子邮件地址错误

5.无法找到到所请求目标的有效证书路径:确保Entra ID证书链证书（根据pcap的Microsoft Azure RSA TLS颁发CA和DigiCert Root CA等）存在于ISE的受信任证书存储中，并且为“Trust for authentication within ISE and Client-Server communication(Infrastructure)”角色受信任。

通过获取pcap验证EntraID发送的所有证书。

Certificate Validation Failure

2026-02-10 14:32:47,528 ERROR  [admin-http-pool9][[]] cpm.guestaccess.apiservices.util.SmtpSession -::admin:::- Exception : javax.mail.AuthenticationFailedException: failed to connect

2026-02-10 14:34:06,549 ERROR  [admin-http-pool9][[]] cpm.guestaccess.apiservices.oauth.ExchangeOnlineProvider -::admin:::- Error acquiring token: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

2026-02-10 14:34:28,655 ERROR  [admin-http-pool27][[]] cpm.guestaccess.apiservices.oauth.ExchangeOnlineProvider -::admin:::- Error acquiring token: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target