瞭解如何使用 OAuth 驗證來與 SMTP 通訊協定連線,以及存取 Office 365 使用者的電子郵件數據。
如以下所述,SMTP 通訊協定的 OAuth2 支援適用於Microsoft 365 (,其中包括 Office 網頁版) 和 Outlook.com 使用者。
如果您不熟悉 OAuth 2.0 通訊協定,請參閱 OAuth 2.0 通訊協定 Microsoft 身分識別平台 概觀。 如需實作 OAuth 2.0 通訊協定以驗證使用者和存取安全 API 之 MSAL) Microsoft (驗證連結庫的詳細資訊,請參閱 MSAL 概觀。
註冊您的應用程式
若要使用 OAuth,應用程式必須向 Microsoft Entra 註冊。
請遵循向 Microsoft 身分識別平台 註冊應用程式中所列的指示來建立新的應用程式。
至少以雲端應用程式管理員身分登入 Microsoft Entra 系統管理中心。
流覽至 [身分識別>應用程式 應用程式註冊> 然後選取 [新增註冊]。
輸入應用程式的顯示名稱。 應用程式的使用者在使用應用程式時可能會看到顯示名稱,例如在登入期間。 您可以隨時變更顯示名稱,而多個應用程式註冊可以共用相同的名稱。 應用程式註冊自動產生的應用程式 (用戶端) 識別碼,而不是其顯示名稱,可唯一識別身分識別平臺內的應用程式。
註冊之後,會建立數個標識符,稍後需要其中一些標識符才能取得 OAuth 2.0 令牌。
新增 API 許可權
在左側功能表下,選取 [API 許可權] ,然後選取 [ 新增許可權]。
流覽至我的組織所使用的 API,並搜尋 Office 365 Exchange Online。
在 [要求 API 許可權] 下,選擇 [ 應用程式許可權],選取 [Mail.Send],然後選取 [ 新增許可權]。
新增 API 許可權之後,系統管理員必須選取 [授與管理員同意]。
我們同時支援:委派許可權和應用程式許可權,以允許舊版 OAuth 第三方應用程式,因為它們使用應用程式許可權搭配應用程式秘密。
委派許可權:
- 在 [API 許可權] 索引標籤中,新增 Office 365 Exchange Online\Delegated 許可權的Mail.Send API 許可權。
- 在 [ API 許可權] 索引標籤中 ,選取 [授與系統管理員同意]。
- 在 [ 驗證] 索引 標籤中,啟用 [允許公用用戶端流程]。
- 使用 HVE 郵件使用者的認證 來要求物件
https://outlook.office.com/.default
的令牌。
應用程式權限:
- 在 [API 許可權] 索引標籤中,新增 Office 365 Exchange Online\Application Permissions 的Mail.Send API 許可權。
- 在 [ API 許可權] 索引標籤中 ,選取 [授與系統管理員同意]。
- 在 [ 憑證 & 秘密] 索引標籤中,新增客戶端密碼。
- 使用 客戶端密碼 來要求物件
https://outlook.office.com/.default
的令牌。
HVE SMTP 通訊協議交換
若要驗證 SMTP 伺服器連線,客戶端必須以 AUTH
格式的命令 SASL 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