共用方式為


適用於 Microsoft 365 之大量電子郵件的 OAuth 驗證

瞭解如何使用 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 身分識別平台 註冊應用程式中所列的指示來建立新的應用程式。

  1. 至少以雲端應用程式管理員身分登入 Microsoft Entra 系統管理中心

  2. 流覽至 [身分識別>應用程式 應用程式註冊> 然後選取 [新增註冊]

    新註冊的螢幕快照。

  3. 輸入應用程式的顯示名稱。 應用程式的使用者在使用應用程式時可能會看到顯示名稱,例如在登入期間。 您可以隨時變更顯示名稱,而多個應用程式註冊可以共用相同的名稱。 應用程式註冊自動產生的應用程式 (用戶端) 識別碼,而不是其顯示名稱,可唯一識別身分識別平臺內的應用程式。

    註冊應用程式的螢幕快照。

  4. 註冊之後,會建立數個標識符,稍後需要其中一些標識符才能取得 OAuth 2.0 令牌。

    數個標識碼的螢幕快照。

新增 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\Delegated 許可權的Mail.Send API 許可權。
  2. 在 [ API 許可權] 索引標籤中 ,選取 [授與系統管理員同意]
  3. 在 [ 驗證] 索引 標籤中,啟用 [允許公用用戶端流程]
  4. 使用 HVE 郵件使用者的認證 來要求物件 https://outlook.office.com/.default的令牌。

應用程式權限:

  1. 在 [API 許可權] 索引標籤中,新增 Office 365 Exchange Online\Application Permissions 的Mail.Send API 許可權。
  2. 在 [ API 許可權] 索引標籤中 ,選取 [授與系統管理員同意]
  3. 在 [ 憑證 & 秘密] 索引標籤中,新增客戶端密碼。
  4. 使用 客戶端密碼 來要求物件 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