Share via


設定 Exchange 與 Exchange Online 組織之間的 OAuth 驗證

適用於:Exchange Server 2013

混合式設定精靈會自動設定 Exchange 2013 與 Exchange Online 組織之間的 OAuth 驗證。 如果您的 Exchange 2013 組織包含 Exchange 2010 或 Exchange 2007 伺服器,則混合式設定精靈不會在內部部署和在線 Exchange 組織之間設定 OAuth 驗證。 依預設,這些部署會繼續使用同盟信任程序。 不過,整個組織必須使用新的 Exchange OAuth 驗證通訊協定,才能完整取得某些 Exchange 2013 功能。

新的 Exchange OAuth 驗證程序目前啟用下列 Exchange 功能:

  • MRM (訊息記錄管理)
  • Exchange 就地 eDiscovery
  • Exchange 就地封存

建議所有混合式 Exchange 2013 組織在執行混合式設定精靈之後,設定 Exchange OAuth 驗證。

重要事項

  • 如果您的內部部署組織只執行已安裝累積更新 5 或更新版本的 Exchange 2013 伺服器,請執行混合式部署精靈,而不是執行本主題中的步驟。

  • 此 Exchange Server 2013 功能與中國的 21Vianet 所運作的 Office 365 不完全相容,部分功能可能受限。 如需詳細資訊,請參閱 Office 365 由 21Vianet 運作

開始之前有哪些須知?

提示

有問題嗎? 在 Exchange 論壇中尋求協助。 瀏覽 Exchange Server 的論壇。

您要如何設定內部部署 Exchange 與 Exchange Online 組織之間的 OAuth 驗證?

步驟 1:為您的 Exchange Online 組織建立授權伺服器物件

For this procedure, you have to specify a verified domain for your Exchange Online organization. 它應該是與用於雲端式電子郵件帳戶的主要 SMTP 網域相同的網域。 在下列程式中,此網域稱為 <已驗證的網域>

在 Exchange 管理命令介面中執行下列命令, (內部部署 Exchange 組織中的 Exchange PowerShell) :

New-AuthServer -Name "WindowsAzureACS" -AuthMetadataUrl "https://accounts.accesscontrol.windows.net/<your tenant coexistence domain>/metadata/json/1"
New-AuthServer -Name "evoSTS" -Type AzureAD -AuthMetadataUrl "https://login.windows.net/<your tenant coexistence domain>/federationmetadata/2007-06/federationmetadata.xml"

注意事項

在 GCC High 或 DoD 中,您必須改用下列命令:

New-AuthServer -Name "WindowsAzureACS" -AuthMetadataUrl "https://login.microsoftonline.us/<your tenant coexistence domain>/metadata/json/1"
New-AuthServer -Name "evoSTS" -Type AzureAD -AuthMetadataUrl "https://login.microsoftonline.us/<your tenant coexistence domain>/federationmetadata/2007-06/federationmetadata.xml"

注意事項

租使用者共存網域的格式為 contoso.mail.onmicrosoft.com

步驟 2:啟用 Exchange Online 組織的夥伴應用程式

在內部部署 Exchange 組織的 Exchange PowerShell 中執行下列命令。

Get-PartnerApplication |  ?{$_.ApplicationIdentifier -eq "00000002-0000-0ff1-ce00-000000000000" -and $_.Realm -eq ""} | Set-PartnerApplication -Enabled $true

步驟 3:匯出內部部署授權憑證

在此步驟中,您必須直接在 Exchange Server 上執行 PowerShell 腳本,以導出內部部署授權憑證,然後在下一個步驟中匯入至您的 Exchange Online 組織。

  1. 將下列文字儲存到 PowerShell 指令碼檔案 (例如 ExportAuthCert.ps1)。

    $thumbprint = (Get-AuthConfig).CurrentCertificateThumbprint
    if((test-path $env:SYSTEMDRIVE\OAuthConfig) -eq $false)
    {
       md $env:SYSTEMDRIVE\OAuthConfig
    }
    cd $env:SYSTEMDRIVE\OAuthConfig
    $oAuthCert = (dir Cert:\LocalMachine\My) | where {$_.Thumbprint -match $thumbprint}
    $certType = [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert
    $certBytes = $oAuthCert.Export($certType)
    $CertFile = "$env:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer"
    [System.IO.File]::WriteAllBytes($CertFile, $certBytes)
    
  2. 在內部部署 Exchange 組織的 Exchange PowerShell 中,執行您在前一個步驟中建立的 PowerShell 指令碼。 例如:

    .\ExportAuthCert.ps1
    

步驟 4:將內部部署授權憑證上傳至 Microsoft Entra 存取控制 Service (ACS)

接下來,使用 Microsoft Graph PowerShell 上傳您在上一個步驟中導出的內部部署授權憑證,以 Microsoft Entra 存取控制 服務 (ACS) 。 如果您未安裝模組,請以系統管理員身分開啟 Windows PowerShell 視窗,然後執行下列命令:

Install-Module -Name Microsoft.Graph.Applications

安裝 Microsoft Graph PowerShell 之後,請完成下列步驟。

  1. 開啟 Windows PowerShell 已安裝 Microsoft Graph Cmdlet 的工作區。 此步驟中的所有命令都會使用連線到 Microsoft Graph 控制台的 Windows PowerShell 執行。

  2. 將下列文字儲存到 PowerShell 指令碼檔案 (例如 UploadAuthCert.ps1)。

     Connect-MgGraph -Scopes Application.ReadWrite.All
    
     $CertFile = "$env:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer"
     $objFSO = New-Object -ComObject Scripting.FileSystemObject
     $CertFile = $objFSO.GetAbsolutePathName($CertFile)
     $cer = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($CertFile)
     $binCert = $cer.GetRawCertData()
     $credValue = [System.Convert]::ToBase64String($binCert)
     $ServiceName = "00000002-0000-0ff1-ce00-000000000000"
     $p = Get-MgServicePrincipal -Filter "AppId eq '$ServiceName'"
     $params = @{
     	keyCredentials = @{
     		type = "AsymmetricX509Cert"
     		usage = "Verify"
     		key = $credValue
     	}
     }
     Update-MgServicePrincipal -ServicePrincipalId $p.Id -BodyParameter $params
    
  3. 執行您在前一個步驟中建立的 PowerShell 指令碼。 例如:

    .\UploadAuthCert.ps1
    
  4. 啟動指令碼之後,即會顯示認證對話方塊。 輸入 Microsoft Online Microsoft Entra 組織中租用戶系統管理員帳戶的認證。 執行腳本之後,讓 Windows PowerShell 連線到 Microsoft Graph 會話保持開啟。 您將在下一個步驟中以此工作階段執行 PowerShell 指令碼。

步驟 5:向 Microsoft Entra ID 註冊內部和外部內部部署 Exchange HTTP 端點的所有主機名授權單位

您需要針對內部部署 Exchange 組織中每個可公開存取的端點執行此步驟中的腳本,包括混合式新式驗證) 的內部和外部 URL。 例如,如果 Exchange 在外部可用 https://mail.contoso.com/ews/exchange.asmx,請使用服務主體名稱 https://mail.contoso.com。 註冊其他外部主機名稱授權單位並無限制。

若要確認內部部署組織中的 Exchange 連接點,請在 Exchange 管理命令介面中執行下列命令:

Get-MapiVirtualDirectory | FL server,*url*
Get-WebServicesVirtualDirectory | FL server,*url*
Get-OABVirtualDirectory | FL server,*url*

注意事項

下列腳本會要求連線到 Microsoft Graph 的 Windows PowerShell 連線到您的 Microsoft 365 組織,如上一節的步驟 4 所述。

  1. 將下列文字儲存到 PowerShell 指令碼檔案 (例如 RegisterEndpoints.ps1)。 此範例使用 contoso.com。 將和 https://autodiscover.contoso.com/ 取代https://mail.contoso.com/為內部部署 Exchange 組織的適當主機名授權單位。

     $ServiceName = "00000002-0000-0ff1-ce00-000000000000";
     $x = Get-MgServicePrincipal -Filter "AppId eq '$ServiceName'"
     $ServicePrincipalUpdate =@(
        "https://mail.contoso.com/","https://autodiscover.contoso.com/"
     )
     Update-MgServicePrincipal -ServicePrincipalId $x.Id -ServicePrincipalNames $ServicePrincipalUpdate
    
  2. 在連線到 Microsoft Graph 的 Windows PowerShell 中,執行您在上一個步驟中建立的 Windows PowerShell 腳本。 例如:

    .\RegisterEndpoints.ps1
    
  3. 若要確認已新增所有記錄,請在連線至 Microsoft Graph Windows PowerShell 中執行下列命令,並在結果中尋找https://namespace專案。

    Get-MgServicePrincipal -Filter "AppId eq '$ServiceName'" | select -ExpandProperty ServicePrincipalNames
    

步驟 6:從內部部署組織建立 IntraOrganizationConnector 至 Microsoft 365 或 Office 365

您必須為 Exchange Online 中裝載的信箱定義目標位址。 建立您的 Microsoft 365 或 Office 365 組織時,會自動建立此目標位址。 例如,如果您組織裝載於 Microsoft 365 或 Office 365 組織的網域是「contoso.com」,則您的目標服務位址會是「contoso.mail.onmicrosoft.com」。

使用 Exchange PowerShell,在內部部署組織中執行下列 Cmdlet:

$ServiceDomain = Get-AcceptedDomain | where {$_.DomainName -like "*.mail.onmicrosoft.com"} | select -ExpandProperty Name
New-IntraOrganizationConnector -name ExchangeHybridOnPremisesToOnline -DiscoveryEndpoint https://outlook.office365.com/autodiscover/autodiscover.svc -TargetAddressDomains $ServiceDomain

步驟 7:從您的 Microsoft 365 或 Office 365 組織建立 IntraOrganizationConnector 至內部部署 Exchange 組織

您必須為內部部署組織中裝載的信箱定義目標位址。 如果您組織的主要 SMTP 位址是「contoso.com」,則目標位址會位於「contoso.com」中。

您還必須定義內部部署組織的外部自動探索端點。 如果您的公司是「contoso.com」,自動探索端點通常是下列其中一個值:

  • https://autodiscover.<your primary SMTP domain>/autodiscover/autodiscover.svc
  • https://<your primary SMTP domain>/autodiscover/autodiscover.svc>

注意事項

您可以在內部部署和 Microsoft 365 或 Office 365 租使用者中使用 Get-IntraOrganizationConfiguration Cmdlet 來判斷 New-IntraOrganizationConnector Cmdlet 所需的端點值。

線上到 Exchange Online PowerShell 之後,請將 和 <your on-premises SMTP domain> 取代<your on-premises Autodiscover endpoint>為您的值,然後執行下列命令:

New-IntraOrganizationConnector -name ExchangeHybridOnlineToOnPremises -DiscoveryEndpoint <your on-premises Autodiscover endpoint> -TargetAddressDomains <your on-premises SMTP domain>

步驟 8:針對 Exchange 2013 SP1 以前的伺服器設定 AvailabilityAddressSpace

當您在舊版 Exchange 組織中設定混合式部署時,至少需要一部執行 Exchange 2013 SP1 或更新版本的 Exchange 2013 伺服器。 Exchange 2013 伺服器需要用戶端存取和信箱伺服器角色。 Exchange 2013 伺服器會協調現有 Exchange 內部部署組織與 Exchange Online 組織之間的通訊。 我們強烈建議您在內部部署組織中安裝多個 Exchange 2013 伺服器,以協助增進混合部署功能的可靠性與可用性。

在具有 Exchange 2010 或 Exchange 2007 的 Exchange 2013 組織中,建議所有因特網對向前端伺服器都是執行 SP1 或更新版本的 Exchange 2013 用戶端存取伺服器。 所有 Exchange Web 服務 (EWS) 要求都必須通過 Exchange 2013 用戶端存取伺服器。 此需求包括從 Microsoft 365 到內部部署 Exchange 組織的要求,以及內部部署 Exchange 組織對 Microsoft 365 的要求。 請務必有足夠的 Exchange 2013 用戶端存取伺服器來處理處理負載,並提供連線備援。 您需要的用戶端存取伺服器數目取決於 EWS 要求的平均數量,並依組織而有所不同。

完成下列步驟之前,請確定:

  • 前端混合式伺服器是 Exchange 2013 SP1 或更新版本。
  • Exchange 2013 伺服器必須有唯一的外部 EWS URL。 Microsoft 365 或 Office 365 組織必須連線到這些伺服器,才能讓混合式功能的雲端式要求正確運作。
  • 伺服器同時具備 Mailbox 和 Client Access server role
  • 任何現有的 Exchange 2010/2007 Mailbox Server 和 Client Access Server 已套用最新的累計更新 (CU) 或 Service Pack (SP)。

注意事項

現有的 Exchange 2010/2007 Mailbox Server 可繼續使用 Exchange 2010/2007 Client Access Server 作為非混合式功能連線的前端伺服器。 只有來自 Microsoft 365 或 Office 365 組織的混合式部署功能要求需要連線到 Exchange 2013 伺服器。

AvailabilityAddressSpace 必須在 Exchange 2013 之前的用戶端存取伺服器上設定,該伺服器指向內部部署 Exchange 2013 SP1 用戶端存取伺服器的 Exchange Web 服務端點, () 。 此端點與前面步驟 5 所述的端點相同,也可以在內部部署 Exchange 2013 SP1 Client Access Server 上執行下列指令程式來決定:

Get-WebServicesVirtualDirectory | Format-List AdminDisplayVersion,ExternalUrl

注意事項

如果從多部伺服器傳回虛擬目錄資訊,請確定您使用針對 Exchange 2013 SP1 Client Access Server 傳回的端點。 它會針對 AdminDisplayVersion 參數顯示 15.0 (組建 847.32) 或更高版本。

若要設定 AvailabilityAddressSpace,請使用 Exchange PowerShell,並在您的內部部署組織中執行下列 Cmdlet:

Add-AvailabilityAddressSpace -AccessMethod InternalProxy -ProxyUrl <your on-premises External Web Services URL> -ForestName <your Microsoft 365 or Office 365 service target address> -UseServiceAccount $True

如何知道這是否正常運作?

您可以使用 Test-OAuthConnectivity Cmdlet 驗證 OAuth 組態是否正確。 此 Cmdlet 會確認內部部署 Exchange 和 Exchange Online 端點可以成功驗證彼此的要求。

若要驗證內部部署 Exchange 組織是否可成功連線至 Exchange Online,請在內部部署組織的 Exchange PowerShell 中執行下列命令:

Test-OAuthConnectivity -Service EWS -TargetUri https://outlook.office365.com/ews/exchange.asmx -Mailbox <On-Premises Mailbox> -Verbose | Format-List

若要確認您的 Exchange Online 組織可以成功連線到內部部署 Exchange 組織,請連線到 Exchange Online PowerShell,然後執行下列命令:

Test-OAuthConnectivity -Service EWS -TargetUri <external hostname authority of your Exchange On-Premises deployment>/metadata/json/1 -Mailbox <Exchange Online Mailbox> -Verbose | Format-List

因此,舉例來說,

Test-OAuthConnectivity -Service EWS -TargetUri `https://mail.contoso.com/metadata/json/1` -Mailbox ExchangeOnlineBox1 -Verbose | Format-List

重要事項

您可以忽略「SMTP 位址沒有相關聯的信箱」錯誤。 只有 ResultTask 參數傳回 Success 的值才重要。 例如,測試輸出的最後一個區段應該會讀取:

ResultType: Success Identity: Microsoft.Exchange.Security.OAuth.ValidationResultNodeId IsValid: True ObjectState: New

提示

有問題嗎? 在 Exchange 論壇中尋求協助。 瀏覽 Exchange Server 的論壇。