Outlook 2016 對 Autodiscover 的實作

摘要

Autodiscover 是 Outlook 用來取得連接伺服器設定資訊的功能。 在 Outlook 2016 與 Exchange 伺服器中,Autodiscover 被視為設定資訊的唯一真實點,必須正確配置並運作,Outlook 才能完整運作。 本文說明 Outlook 2016 目前 Click-to-Run 版本中自動發現功能的實作。 欲了解更多關於 Office 365 用戶端通道釋出的資訊,請參閱以下 Microsoft 網站:

Office 365 用戶端更新通道版本與組號

Office 365 用戶端更新通道釋出

其他資訊

自動發現定時

自動發現會在以下時間執行:

  1. 在帳號建立時。
  2. 在固定間隔內收集提供 Exchange Web Service 功能 (OOF、可用性服務等 URL 變更) 。 若此過程成功,一小時後再嘗試一次。 若未成功,下一次嘗試則在5分鐘後進行。 由於所有 Microsoft Office 應用程式使用的背景任務基礎架構,每次嘗試的延遲可能被錯開多達 25%。
  3. 針對某些連線故障。 在各種情況下,當連線嘗試失敗時,Outlook 會啟動自動發現任務,以取得新的設定以修正連線問題。
  4. 當另一個應用程式使用 MAPI 呼叫時, 欲了解更多關於 MAPI 的資訊,請參閱以下 MSDN 文章: Outlook MAPI 參考資料。

自動發現效率

請使用 使用者主體名稱 (UPN) 來加速自動發現流程。

在網域加入的電腦上,Outlook 需要知道使用者的 UPN 才能啟動自動發現程序。 UPN 可能被用來登入 Windows,這時 Outlook 就能直接從登入憑證存取 UPN。 但如果使用者使用 domain\username 在 Windows 登入,Outlook 只會給使用者相同的帳號憑證。 為了取得 UPN,Outlook 必須先在目錄中查詢使用者。 Outlook 會要求此查詢追蹤推薦。 在複雜環境中,這可能導致在找到結果前需要接觸大量 DC。 Outlook 在發現該使用者的 UPN 後,該值會被快取到設定檔中,且該使用者不應再進行查詢。

為避免這種情況,使用者可使用UPN登入,而非網域/使用者名稱。

ITAR 考量

Microsoft Office 365 提供可支援客戶履行 ITAR 義務的功能。 在 Outlook 的 Autodiscover 功能中,此功能集包含政策設定與行為,確保用於 Autodiscover 的服務端點符合主權雲端需求。 具體來說,在自動發現流程中列出的第 4 步與第 11 步) 中列出的Office 365具體步驟中, ( 可進行政策控制,以確保在自動發現過程中使用適當的服務端點。 

自動發現流程 每次 Outlook 需要自動發現資訊時,都會依序嘗試取得包含設定的 XML 有效載荷。 許多步驟可透過 GPO) (群組原則 物件來控制,且 GPO 值包含在步驟描述中。

步驟 1:檢查重啟情境

在某些情況下,例如在 Outlook 執行時新增第二個帳號,Autodiscover 的負載會被快取到本地檔案,以便在重新啟動 Outlook 用戶端時使用。 Autodiscover 的第一步是檢查登錄檔,尋找某些特殊的「開機」資訊,告訴 Outlook 你正處於這些重啟情境中,並從特殊的本地檔案讀取 Autodiscover 的有效載荷。 這種情況很少見,通常不是一般 Autodiscover 問題的原因。 在此步驟中,如果 Outlook 判定你處於這種特殊的開機情境,且嘗試取回 Autodiscover XML 資料失敗,整個 Autodiscover 嘗試也會失敗。 不會嘗試其他步驟。

這個步驟沒有特定的政策控制。

步驟 2:檢查本地資料偏好

Outlook 提供一個 GPO,讓管理員可以部署特定的 Autodiscover XML 檔案以進行設定。 若管理員部署了此登錄檔值並做種 autodiscover.xml 檔案,Outlook 會從該檔案讀取 Autodiscover 有效載荷。 這同樣是罕見的情況,通常不會造成一般 Autodiscover 問題。 若此步驟無法取得有效載荷,Outlook 將進入第三步。

欲了解更多 Autodiscover XML 的資訊,請參閱以下 TechNet 文章: 計畫在 Outlook 2010 中自動配置使用者帳號

本文為 Outlook 2010 撰寫。 不過,它對後續版本的 Outlook 仍然適用。

此步驟的政策控制值如下: PreferLocalXML

步驟三:檢查最後已知貨物 (LKG) 資料

當 Autodiscover 成功透過任何步驟檢索 XML 有效載荷時,該有效載荷可能會以「最後已知良好」配置的身份在本地快取。 第一個常見成功取得 Autodiscover payload 的方法就是從這個已知良好檔案中取得。 最後已知正常的 XML 檔案路徑來自 Outlook 設定檔。 LKG 步驟僅用於發現主要信箱配置。 如果 AutoDiscover 查詢是針對非主要信箱, (備用、代理、公共資料夾、群組信箱等) ,那麼 LKG 步驟會自動跳過。 如果此步驟無法取得有效載荷,Outlook 將進入第四步。

此步驟的政策控制值如下: ExcludeLastKnownGoodURL

步驟四:檢查 O365 是否為優先

Outlook 會用一套啟發式方法來判斷所提供的使用者帳號是否來自 Office 365。 如果 Outlook 確定您是 O365 使用者,會嘗試從已知的 O365 端點取回 Autodiscover 有效載荷, (通常是 https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml 或 https://autodiscover-s.partner.outlook.cn/autodiscover/autodiscover.xml) 。 若此步驟無法取得有效載荷,Outlook 將進入第 5 步。

此步驟的政策控制值如下:

ExcludeExplicitO365Endpoint.

ITAR 考量

預設情況下,Outlook 會查詢已知端點以取得 Autodiscover 有效載荷。 現有的繞過此步驟的政策仍然有效,且可直接進入第 5 步,無需嘗試端點。 另外,有一項新政策會指示 Outlook 查詢中央的 Office 365 設定服務,以取得適當的 URL,進而取得 Autodiscover 的載荷。 概念上,這個過程如下:

  1. 你制定新政策。
  2. 在自動發現程序的第 4 步,Outlook 會查詢 Office 365 設定服務。
  3. 服務 (判斷指定使用者是否有) 特別的 ITAR 需求,並利用 UPN 的網域資訊回傳該使用者的適當網址。
  4. Outlook 嘗試從服務提供的 URL 中擷取 Autodiscover 有效載荷。

使用 Office 365 設定服務的新功能所設定的政策控制值為 EnableOffice365ConfigService

注意

自建檔 16.0.9327.1000 起, EnableOffice365ConfigService 政策已不再使用。

步驟五:檢查SCP資料

若電腦已加入網域,Outlook 會執行 LDAP 查詢以取得服務連接點資料,回傳 Autodiscover XML 的路徑。 接著會嘗試對每個 SCP 查詢回傳的 URL,嘗試取得 Autodiscover 有效載荷。 若此步驟無法取得有效載荷,Outlook 將進入第 6 步。

欲了解更多關於 SCP 的資訊,請參閱以下 MSDN 文章: 使用服務連接點發佈

此步驟的政策控制值如下: ExcludeScpLookup

步驟 6:檢查根網域

在此步驟中,Outlook 會從初始地址的網域名稱建立一個 URL,格式為 https://< domain>/autodiscover/autodiscover.xml,並嘗試從所得 URL 中取得有效載荷。 由於許多根網域未設定自動發現,Outlook 會刻意靜音在嘗試檢索時發生的憑證錯誤。 如果此步驟無法取得有效載荷,Outlook 將進入第 7 步。

此步驟的政策控制值如下: ExcludeHttpsRootDomain

步驟七:檢查 Autodiscover 網域

在此步驟中,Outlook 會從初始地址的網域名稱建立一個 https://autodiscover 格式的 URL。<>domain/autodiscover/autodiscover.xml 並嘗試從產生的 URL 中取得有效載荷。 由於這是 Autodiscover 資料的主要 URL,Outlook 不會靜音在嘗試擷取時發生的任何憑證錯誤。 若此步驟無法取得有效載荷,Outlook 將進入第 8 步。

此步驟的政策控制值如下: ExcludeHttpsAutoDiscoverDomain

步驟八:檢查本地資料

在步驟 2 中,Outlook 檢查管理員是否部署了政策,專門以 Autodiscover payload 作為偏好。 如果沒有相關政策,但之前的步驟沒有取得有效載荷,Outlook 現在即使沒有啟用 PreferLocalXML 設定,也會嘗試從本地檔案取得有效載荷。 若此步驟無法取得有效載荷,Outlook 將進入第 9 步。 

此步驟沒有政策控制。

步驟 9:檢查 HTTP 重定向

此步驟中,Outlook 會向自動發現網域的 URL (http://autodiscover 發送請求。<>網域/自動發現/autodiscover.xml) 並測試重定向回應。 如果回傳的是實際的 Autodiscover XML 有效載荷而非重定向,Outlook 會忽略實際的 Autodiscover XML 回應,因為該回應是未 (http) 安全性下取得的。 若回應是有效的重定向 URL,Outlook 會依照該重定向 URL 嘗試從新網址取得有效載荷 XML。 Outlook 也會在此步驟執行憑證檢查,以防止被導向可能有害的 URL。 若此步驟無法取得有效載荷,Outlook 將進入第 10 步。

此步驟的政策控制值如下: ExcludeHttpRedirect

步驟 10:檢查 SRV 資料

在此階段,Outlook 會查詢「_autodiscover._tcp.<網域名稱>」,並循環搜尋第一個使用 HTTPS 作為協定的紀錄。 Outlook 接著嘗試從該 URL 取得有效載荷。 若此步驟無法取得有效載荷,Outlook 將進入第 11 步。
  此步驟的政策控制值如下: 排除SrvRecord

步驟 11:檢查 O365 是否為保險

如果之前所有步驟都沒有回傳有效載荷,Outlook 會使用較寬鬆的啟發式方法來判斷最後嘗試對 O365 端點是否有潛在幫助。 如果 Outlook 認為值得嘗試,會嘗試已知的 O365 自動發現端點,前提是該帳號是 O365 帳號。 此嘗試使用與第四步相同的目標網址,唯一不同的是它是作為最後手段嘗試,而非在自動發現流程的早期階段。

此步驟的政策控制值如下: ExcludeExplicitO365Endpoint

ITAR 考量

如果 Outlook 進入此階段仍未成功取得 Autodiscover 的有效載荷,將進行兩次測試以判斷是否應該嘗試這些知名的 Office 365 端點。 首先,若信箱是消費者帳戶 (例如 outlook.com) ,則嘗試使用知名端點。 其次,若信箱被認定屬於不符合 ITAR 要求的網域,則嘗試使用已知端點。 若該信箱被認定為商業且屬於有 ITAR 要求的網域,則不會嘗試傳送知名的 Office 365 端點。 未來版本中,步驟 11 可能會移至與步驟 4 相同的邏輯,並呼叫 Office 365 設定服務。 當該變更完成後,本文將更新以反映新的流程步驟。

自動發現流程中第 9 步的重定向處理是明確處理非安全重定向資料的步驟。 在其他安全步驟中,對於任何嘗試取得 Autodiscover XML 有效載荷的嘗試,端點可能的回應是重定向回應。 這個回應會告訴 Outlook 重新導向到一個新的、不同的 URL,以便嘗試取得有效載荷。 此外,重定向資料中可能包含一個新的、不同的電子郵件地址,作為自動發現嘗試的目標地址。 Outlook 將三個獨立的回應視為「重定向回應」:

  • HTTP 狀態碼 (301、302) 並換上新網址
  • HTTP 狀態碼為 200,但 payload XML 會告訴 Outlook 將重定向到不同的 URL
  • HTTP 狀態碼為 200,但 payload XML 告訴 Outlook 使用不同的 smtp 位址作為目標位址。

在情況 1 和 2 中,Outlook 嘗試從新網址中取得自動發現的 XML,前提是協定是 https。 不安全的 (http) URL 不會嘗試。 此外,即使新網址的協定是 https,Outlook 仍會檢查憑證資訊以提供額外的安全措施。

第三種情況是 Outlook 從頭開始整個自動發現流程。  如果嘗試 (1至11) 所有步驟都未成功使用新電子郵件地址,Outlook 會返回原始電子郵件地址,進入步驟5,繼續嘗試取得帶有原始地址的 XML 有效載荷。

例外:自動發現流程中的步驟是 Outlook 嘗試取得自動發現有效載荷的一般規則。 有各種優化和特殊嘗試可能會稍微改變流程。 例如,在新建帳戶時,Outlook 內部會跳過第 3 步 (檢查最後一次可行貨物 (LKG) 資料) ,因為目前還無法有最後一次已知良好紀錄。  同樣地,如果嘗試是因為使用目前設定資訊而錯誤觸發,Outlook 會故意再次自動發現,而不會使用 LKG 資訊,因為最後已知的良好資訊可能導致失敗。

政策控制 Autodiscover Process 區段定義的政策值可以是基於政策的登錄值或非基於政策的值。  當這些設定是透過 GPO,或手動設定政策鍵時,設定會優先於非政策鍵。

非政策說明:HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\AutoDiscover

政策重點:HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\16.0\Outlook\AutoDiscover

每個值的類型為 DWORD。

PreferLocalXML 與其他控制值不同,因為設定為 1 時,Outlook 會開啟該步驟。  對於剩餘的數值,設定為 1 時,Outlook 會要求關閉或跳過相關步驟。 例如,將 ExcludeHttpsRootDomain 設為 1,Outlook 就不會執行第 6 步。

額外登錄控制

Outlook 提供數個額外的基於登錄檔的設定選項,可能會影響自動發現流程:

使用 Office 365 設定服務

說明:HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\AutoDiscover
Value: EnableOffice365ConfigService
預設值:0
資料:將此 DWORD 資料設為 1,強制 Outlook 呼叫 Office 365 設定服務以取得適當的 Autodiscover URL。

HTTP 逾時設定

說明:HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\AutoDiscover
價值:暫停
預設時間:25秒
最少:10秒
最長:120秒
 

資訊:指定的逾時時間會被用作 WinHttpSetTimeout 的設定。 指定的資料會傳遞到 WinHttpSetTimeouts API 的四個參數。 這有可能讓無法被存取的 HTTP 請求更快逾時,進而提升整體效能。 設定也可以讓 HTTP 請求即使超過 25 秒預設時間也能成功,方法是將逾時設定提高到 25 秒。
Mapi/Http 協定控制

說明:HKEY_CURRENT_USER\Software\Microsoft\Exchange
值:MapiHttpDisabled
預設值:0
資料:1 = 協定已停用;0 = 協定已啟用

資訊:這個數值不在 Autodiscover 鍵下。 這是一個通用設定,用來控制 Outlook 是否能透過 Mapi/Http 協定堆疊嘗試連接 Exchange。 Outlook 2016 的預設設定是不停用這個協定。 這讓 Autodiscover 程序能在發現程序中加入特殊標頭 (X-MapiHttpCapability:1) ,以便評估與處理 Mapi/Http 協定設定。
舊有認證協商控制

說明:HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\RPC
值:AllowNegoCapabilityHeader
預設值:0
資料:1 = 標頭被加入;0 = 未加入標頭

資訊:請注意,這個數值不在 Autodiscover 鍵下。 此設定控制是否會在 HTTP 請求中加入認證協商標頭。 標頭的內容取決於用戶端電腦的認證能力。 範例標頭可能是:「X-Nego-Capability: Negotiate, pku2u, Kerberos, NTLM, MSOIDSSP」。 這個登錄檔值及其新增標頭在任何現代認證堆疊中很少使用,且極不可能對 tAodiscover 流程產生正面或負面的影響。
憑證錯誤處理

說明:HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\AutoDiscover
值:ShowCertErrors
預設值:0
資料:1 = 顯示憑證警告/錯誤;0 = 不顯示證書警告

資訊:此值控制 Outlook 執行 http 任務時接收的憑證錯誤與警告。 Outlook 在某些情況下可能會在自動發現流程第 6 步 () 覆蓋此設定,但一般情況下,若啟用此設定,Outlook 會跳出安全對話框,顯示憑證錯誤或警告,並允許使用者確認或取消 Http 請求。 有三個特定的憑證錯誤,使用者可以選擇忽略,並讓 Outlook 重新嘗試 http 請求:

  • WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID – 憑證屬性中的日期有問題

  • WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID – 憑證屬性中的通用名稱有問題

  • WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA – 憑證屬性中的憑證授權機構有問題

    關於這三種憑證錯誤狀態的更多資訊,請參閱 WINHTTP_STATUS_CALLBACK回調函式

代理驗證處理

說明:HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\HTTP\
值:AllowOutlookHttpProxyAuthentication
預設值:0
資料:1 = 允許 Outlook 處理來自代理伺服器的認證挑戰;0 = 代理伺服器的認證挑戰無聲失敗
 

資訊:此登錄檔值允許放寬安全設定,詳見 Microsoft 知識庫的以下文章:

3115474 MS16-099:Outlook 2010 安全更新說明:2016 年 8 月 9 日

其他協議的自動發現

AutoDiscover 作為一項功能,Outlook 也用來發現並設定Exchange ActiveSync (EAS) 帳號。 EAS 自動發現的流程與決策與本文所述步驟是分開的。 例如,EAS 實作未實作 O365 端點邏輯,也沒有檢查 SCP 位置的步驟。 本文旨在說明 Outlook 在 Autodiscover 嘗試從 Exchange 取得基於 MAPI 協定的詳細步驟。

參考資料

關於 autodiscover 的舊有資訊可在 Microsoft 知識庫的以下文章中找到:

2212902 在 \Autodiscover 鍵下設定登錄檔時,意外自動發現行為

欲了解更多 Autodiscover 資訊,請參閱以下 Microsoft 文章:

Autodiscover 交換

Autodiscover 服務