소개
이 문서에서는 Microsoft Exchange Online Mail SMTP 서버를 통한 이메일 통신을 활성화하기 위한 ISE의 OAuth 2.0 컨피그레이션에 대해 설명합니다.
사전 요구 사항
요구 사항
Cisco에서는 Cisco ISE(Identity Services Engine) 및 SMTP(Simple Mail Transfer Protocol) 서버 기능 및 OAuth 권한 부여에 대한 기본 지식이 있는 것을 권장합니다.
사용되는 구성 요소
ISE 버전 3.5 P1(3.2 패치 8, 3.3 패치 8, 3.4 패치 4도 이 기능 지원)
Microsoft EntraID 및 Microsoft 365 관리 센터에 액세스
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
구성
이 섹션에서는 다음에 사용되는 이메일 알림을 지원하기 위한 Microsoft Centera ID 및 ISE의 컨피그레이션에 대해 설명합니다.
- 전자 메일 옵션에 시스템 경보 포함을 활성화하여 전자 메일 경보 알림을 내부 관리자 사용자에게 보냅니다. 보낸 사람 전자 메일 주소를 구성하려면 [관리] > [시스템] > [설정] > [경보 설정] > [경보 알림]을 클릭하고 Microsoft 365 관리 센터에서 구성한 전자 메일 주소에 전자 메일 주소를 입력합니다
- 스폰서는 로그인 자격 증명 및 비밀번호 재설정 지침과 함께 게스트에게 이메일 알림을 보냅니다. 게스트 및 스폰서 플로우의 경우 발신자 이메일은 Work Centers(작업 센터) > Guest Access(게스트 액세스) > Settings(설정) > Guest email settings(게스트 이메일 설정) > Default 'From'(기본 '발신') 이메일 주소에서 Microsoft 365 관리 센터에 구성된 이메일 주소로 구성됩니다
- 게스트가 성공적으로 등록하고 게스트 계정이 만료되기 전에 수행할 작업을 수행한 후 자동으로 로그인 자격 증명을 받을 수 있도록 합니다.
- 비밀번호 만료일 이전에 ISE에 구성된 ISE 관리자 사용자/내부 네트워크 사용자에게 알림 이메일을 보냅니다.
이메일을 보내는 ISE 노드
| 이메일 목적 |
이메일을 보내는 노드 |
| 게스트 액세스 만료 |
PAN(Primary Policy Administration Node) |
| 알람 |
PMnT(Active Monitoring and Troubleshooting) 노드 |
| 게스트 및 스폰서 포털의 스폰서 및 게스트 알림 |
정책 서비스 노드(PSN) |
| 비밀번호 만료 |
기본 PAN |
네트워크 다이어그램
ISE에서 OAuth를 사용하려면 3단계가 필요합니다.
1. Microsoft Entra ID로 ISE 애플리케이션 등록
2. 토큰 서버(IDP)에서 액세스 토큰 가져오기
3. 액세스 토큰을 사용하여 SMTP 서버에 대한 연결 요청을 인증합니다.

설정
1단계: 사용자 전자 메일 계정 만들기
Microsoft 365 관리 센터에서 등록된 도메인에 사용자 전자 메일 계정을 만듭니다. 샘플 계정은 EntraID 애플리케이션과 연결하고 ISE에서 이메일을 보내기 위해 "no-reply"라는 사용자 이름을 사용하여 여기서 생성됩니다.
- Users(사용자) > Active users(활성 사용자)로 이동하고 ISE에서 이메일을 보낼 사용자를 추가합니다.
- 기본 설정: 사용자의 이름과 성, 표시 이름, FQDN 및 암호를 추가하고 다음을 클릭합니다.
- 위치를 선택하고 사용자에게 제품 라이센스(Microsoft 365 E5 Developer)를 할당한 후 다음을 클릭합니다.
사용자 추가

4. Optional Settings(선택적 설정)에서 Role User(역할 사용자 할당)(관리 센터 액세스 없음)
5. 추가를 검토하고 완료를 클릭합니다.
6. 이 사용자 계정에서 Microsoft 365 전자 메일에 액세스할 수 있는 앱 선택: Microsoft 365 관리 센터에서 Users(사용자) > Active users(활성 사용자)로 이동하고 사용자 계정을 선택한 후 Mail(메일)을 클릭합니다. Email apps(이메일 앱) > Manage email apps(이메일 앱 관리)에서 인증된 SMTP도 다른 앱과 함께 선택되었는지 확인합니다.
이메일 앱 관리

2단계: Microsoft Entra ID에서 ISE 애플리케이션 등록
- 활성 구독이 있으며 적어도 응용 프로그램 개발자여야 하는 MS Azure 계정을 사용하여 Microsoft Entra 관리 센터에 로그인합니다.
- Entra ID로 이동합니다. 앱 등록 서비스를 검색하고 New Registration을 클릭합니다.
- 앱의 의미 있는 이름을 입력하고 Supported 계정 유형에서 애플리케이션을 사용할 수 있는 사용자를 지정하고 "Single tenant only-your EntraID tenant"를 선택하고 Register(등록)를 클릭하여앱 등록을 완료합니다.
응용 프로그램 등록
4. 애플리케이션 개요 페이지가 표시됩니다. 응용 프로그램을 고유하게 식별하는 응용 프로그램(클라이언트) ID를 기록합니다. 또한 ISE SMTP 컨피그레이션에서 사용할 디렉토리(테넌트) ID입니다.
앱 등록 세부 정보
5. 이제 이 MS Entra 애플리케이션에 애플리케이션 자격 증명을 추가하여 스스로를 안전하게 인증하고 사용자 상호 작용 없이 웹 API에 액세스합니다.
- 새로 등록된 애플리케이션에서 Manage(관리) > Certificates & secrets(인증서 및 비밀)로 이동합니다. Client secrets(클라이언트 암호)에서 New client secret(새 클라이언트 암호)을 클릭합니다. Add a client secret(클라이언트 암호 추가) 아래에 Description(설명)을 입력하고 Expiration duration(만료 기간)을 설정하고 Add(추가)를 클릭합니다.
- 클라이언트 암호 값은 생성 직후를 제외하고는 볼 수 없으므로 기록해 둡니다. 페이지를 나가기 전에 암호를 만들어야 합니다.
- 또한 키 만료일을 적어 둡니다.
애플리케이션 클라이언트 암호 컨피그레이션
6. 응용 프로그램은 사용자/관리자가 권한을 부여한 경우 API를 호출할 수 있습니다. 이제 MS Entra 애플리케이션에 SMTP 권한을 추가합니다.
- 새로 등록된 응용 프로그램에서 Manage(관리) > API permissions(API 권한)로 이동합니다. 권한 추가를 선택합니다.
- 조직에서 사용하는 API 탭을 선택하고 "Office 365 Exchange Online"을 검색합니다.
- Application permissions(애플리케이션 권한)를 클릭합니다.
- SMTP 액세스의 경우 SMTP.SendAsApp 권한을 선택합니다.
- 이 권한에는 테넌트 관리자 동의가 필요합니다. <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에 의해 활성화됩니다.
- 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 테넌트에 연결
III. Exchange에서 Microsoft Entra 애플리케이션 서비스 사용자의 등록 응용 프로그램 등록에 AppID 및 ObjectID를 사용합니다[OBJECT_ID는 엔터프라이즈 응용 프로그램 노드(Azure 포털)의 개요 페이지에 있는 개체 ID입니다. 애플리케이션 등록 노드의 개요 페이지에 있는 객체 ID가 아닙니다. 잘못된 Object ID를 사용하면 인증이 실패함].
PS/Users/abc> New-ServicePrincipal -AppId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxx6a953e -ObjectId b10axxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Exchange에서 Entra 응용 프로그램 서비스 사용자 등록
IV. Get-ServicePrincipal cmdlet을 사용하여 등록된 서비스 사용자 식별자를 확인하십시오.
PS/Users/abc> Get-ServicePrincipal | fl
등록된 서비스 사용자 식별자 확인
V. 이제 테넌트 관리자는 애플리케이션이 액세스하도록 허용된 테넌트의 특정 사서함을 추가할 수 있습니다. 이 구성은 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(Simple Mail Transfer Protocol) 서버를 구성하려면 메뉴 아이콘(
) 및 Administration > System > Settings > SMTP Server를 선택합니다.!를 구성합니다.
- SMTP Server Settings(SMTP 서버 설정) 영역에서
- SMTP 서버: smtp.office365.com
- SMTP 포트: 587
- 연결 시간 초과: 60초
- Authentication Settings(인증 설정) 영역에서 Use Authentication Settings(인증 설정 사용) 옵션을 활성화하려면 토글 스위치를 사용합니다.
MS Exchange Online OAuth를 선택합니다. Microsoft Exchange Online OAuth를 구성하려면 다음 값을 입력합니다.
- Username(사용자 이름) 필드에 Exchange Online 사용자 이름의 전체 이메일 주소를 입력합니다.
- Client ID(클라이언트 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
다음을 확인합니다.
확인하려면 게스트 이메일 설정을 구성합니다. Work Centers(작업 센터) > Guest Access(게스트 액세스) > Guest Email Settings(게스트 이메일 설정)로 이동합니다. Enable email notifications to guests(게스트에 대한 이메일 알림 활성화)를 선택하고 Step1 of configuration and Save(컨피그레이션 및 저장)에서 구성한 no-reply 계정의 기본 'From' 이메일 주소를 구성합니다.
게스트 이메일 설정 변경
Work Centers(작업 센터) > Guest Access(게스트 액세스) > Portal & Components(포털 및 구성 요소) > Guest Portals(게스트 포털) > Self-Registered Guest Portal(셀프 등록 게스트 포털)(기본값) > Portal Page Customization(포털 페이지 맞춤화) > Notifications(알림) > Email(이메일)로 이동하여 테스트 이메일을 보냅니다.
미리 보기 창 오른쪽에서 설정 > 테스트 이메일 전송, 이메일 ID 추가, 전송 을 클릭합니다.
셀프 등록 포털에서 이메일 테스트
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 루트 CA 등)가 ISE의 신뢰할 수 있는 인증서 저장소에 있으며 "ISE 및 클라이언트-서버 통신(인프라) 내에서 인증을 위한 신뢰" 역할에 대해 신뢰되는지 확인합니다.
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
