注意: 本文仅适用于由世纪互联在中国运营的 Microsoft 365 以及无法更新到 Exchange 2013 CU5 或更高版本的本地 Exchange 组织。
现在支持本地 Exchange 2013 CU5 组织和 Microsoft 365 服务之间的全功能混合部署。 但是,如果您不能在本地组织中升级到或安装 Exchange 2013 CU5,您仍然可以在本地 Exchange 和 Exchange Online 组织之间配置闲/忙日历共享。
按照下面的步骤可为您的本地和 Exchange Online 组织启用此混合部署功能。
步骤 1:为Exchange Online组织创建授权服务器对象
对于此过程,您必须为您的 Exchange Online 组织指定一个经过验证的域。 此域应与基于云的电子邮件帐户使用的主 SMTP 域是同一个域。 此域在以下过程中称为 <您的经过验证的域>。
在您的本地 Exchange 组织中在 Exchange 命令行管理程序中运行以下命令。
New-AuthServer -Name "MicrosoftAzureACS" -AuthMetadataUrl https://accounts.accesscontrol.chinacloudapi.cn/<your tenant initial domain>/metadata/json/1
New-AuthServer -Name "EvoSTS" -Type AzureAD -AuthMetadataUrl "https://login.chinacloudapi.cn/<your tenant initial domain>/federationmetadata/2007-06/federationmetadata.xml"
步骤 2:为您的 Exchange Online 组织启用合作伙伴应用程序
在您的本地 Exchange 组织中在 Exchange PowerShell 中运行以下命令。
Get-PartnerApplication | Where-Object {$_.ApplicationIdentifier -eq "00000002-0000-0ff1-ce00-000000000000"-and $_.Realm -eq ""} | Set-PartnerApplication -Enabled $true
步骤 3:导出本地授权证书
在此步骤中,您必须运行 PowerShell 脚本导出本地授权证书,该证书随后在下一步骤中将导入您的 Exchange Online 组织中。
将以下文本保存到一个 PowerShell 脚本文件中,例如将脚本文件命名为 ExportAuthCert.ps1。
$thumbprint = (Get-AuthConfig).CurrentCertificateThumbprint
if((Test-Path $env:SYSTEMDRIVE\OAuthConfig) -eq $false)
{
New-Item -Path $env:SYSTEMDRIVE\OAuthConfig -Type Directory
}
Set-Location -Path $env:SYSTEMDRIVE\OAuthConfig
$oAuthCert = (dir Cert:\LocalMachine\My) | Where-Object {$_.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)
在您的本地 Exchange 组织中在 Exchange PowerShell 中运行在上一步骤中创建的 PowerShell 脚本。 例如:
.\ExportAuthCert.ps1
步骤 4:将本地授权证书上传到 Microsoft Entra 访问控制 Server (ACS)
警告: 此步骤中概述的过程已过时,即将弃用。 请跳过此步骤,在按照此支持文章中所述的步骤配置专用 Exchange 混合应用程序。 如果已按照本部分中的说明上传了身份验证证书,我们强烈建议将其删除。 为此,可以按照部署专用 Exchange 混合应用文档中概述的步骤进行作。
接下来,您必须使用 Windows PowerShell 将在上一步中导出的本地授权证书上载到 Microsoft Azure Active Directory 访问控制服务 (ACS)。 为此,必须安装用于 Windows PowerShell cmdlet 的 Microsoft Azure Active Directory (AD) 模块。 如果未安装,请转到 https://aka.ms/aadposh 安装 Microsoft Azure AD 模块。 安装 Microsoft Azure AD 模块后,完成下面的步骤。
单击用于 Windows PowerShell 的 Microsoft AzureActive Directory 模块的快捷方式,以打开已安装 Microsoft Azure AD cmdlet 的 Windows PowerShell 工作区。 此步骤中的所有命令都将通过用于 Microsoft Azure Active Directory 的 Windows PowerShell 控制台运行。
将以下文本保存到一个 PowerShell 脚本文件中,例如将脚本文件命名为 UploadAuthCert.ps1。
Connect-MsolService
Import-Module msonlineextended
$CertFile = "$env:SYSTEMDRIVE\OAuthConfig\OAuthCert.cer"
$objFSO = New-Object -ComObject Scripting.FileSystemObject
$CertFile = $objFSO.GetAbsolutePathName($CertFile)
$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate$cer.Import($CertFile)
$binCert = $cer.GetRawCertData()
$credValue = [System.Convert]::ToBase64String($binCert)
$ServiceName = "00000002-0000-0ff1-ce00-000000000000"
$p = Get-MsolServicePrincipal -ServicePrincipalName $ServiceNameNew-MsolServicePrincipalCredential -AppPrincipalId $p.AppPrincipalId -Type asymmetric -Usage Verify -Value $credValue
运行在上一个步骤中创建的 PowerShell 脚本。 例如:
.\UploadAuthCert.ps1
启动脚本后,将显示凭据对话框。 输入您的 Microsoft Online Microsoft Azure AD 组织中的租户管理员帐户使用的凭据。 运行此脚本后,让“用于 Microsoft Azure Active Directory 的 Windows PowerShell”会话处于打开状态。 在下一步中您将使用此会话运行 PowerShell 脚本。
步骤 5:使用Microsoft Entra ID 注册外部本地 Exchange HTTP 终结点的所有主机名颁发机构
您必须为您的本地 Exchange 组织中可公开访问的每个终结点运行此步骤中的脚本。 在可能的情况下,我们建议您使用通配符。 例如,假定 Exchange 在 https://mail.contoso.com/ews/exchange.asmx 上外部可用。 在这种情况下可以使用一个通配符:*.contoso.com。 这会涵盖终结点 autodiscover.contoso.com 和 mail.contoso.com。 但是,不会涵盖顶级域 contoso.com。 如果您的 Exchange 2013 客户端访问服务器可通过顶级主机名称授权机构从外部访问,则此主机名颁发机构还必须注册为 contoso.com。 注册其他外部主机名机构没有限制。
如果不确定您的本地 Exchange 组织中的外部 Exchange 终结点,您可以通过在您的本地 Exchange 组织中在 Exchange PowerShell 中运行以下命令来获取外部配置的 Web 服务终结点的列表:
Get-WebServicesVirtualDirectory | FL ExternalUrl
注意: 要成功运行以下脚本,需要按照上一节的步骤 4 中的说明将用于 Microsoft Azure Active Directory 的 Windows PowerShell 连接到 Microsoft Online Microsoft Azure AD 租户。
将以下文本保存到一个 PowerShell 脚本文件中,例如将脚本文件命名为 RegisterEndpoints.ps1。 此示例使用通配符注册 contoso.com 的所有终结点。 将 contoso.com 替换为您的本地 Exchange 组织的主机名称授权机构。
$externalAuthority="*.contoso.com"
$ServiceName = "00000002-0000-0ff1-ce00-000000000000"
$p = Get-MsolServicePrincipal –ServicePrincipalName $ServiceName
$spn = [string]::Format("{0}/{1}", $ServiceName, $externalAuthority)
$p.ServicePrincipalNames.Add($spn)
Set-MsolServicePrincipal –ObjectID $p.ObjectId –ServicePrincipalNames $p.ServicePrincipalNames
在用于 Microsoft Azure Active Directory 的 Windows PowerShell 中,运行在上一步骤中创建的 PowerShell 脚本。 例如:
.\RegisterEndpoints.ps1
步骤 6:从本地组织创建 IntraOrganizationConnector 以 Microsoft 365
您必须为在 Exchange Online 中托管的邮箱定义目标地址。 创建 Microsoft 365 租户时,会自动创建此目标地址。 例如,如果组织在 Microsoft 365 租户中托管的域是“contoso.com”,则目标服务地址将为“contoso.partner.mail.onmschina.cn”。
使用 Exchange PowerShell 在您的本地组织中运行以下 cmdlet:
New-IntraOrganizationConnector -name ExchangeHybridOnPremisesToOnline -DiscoveryEndpoint https://partner.outlook.cn/autodiscover/autodiscover.svc -TargetAddressDomains <your service target address>
步骤 7:创建从 Microsoft 365 租户到本地 Exchange 组织的 IntraOrganizationConnector
您必须为在您的本地组织中托管的邮箱定义目标地址。 如果组织的主要 SMTP 地址为“contoso.com”,则为“contoso.com”。
您还必须为您的本地组织定义外部自动发现终结点。 如果您的公司是“contoso.com”,则这通常是以下之一:
-
https://autodiscover.<您的主 SMTP 域>/autodiscover/autodiscover.svc
-
https://<您的主 SMTP 域>/autodiscover/autodiscover.svc
注意: 可以在本地租户和 Microsoft 365 租户中使用 Get-IntraOrganizationConfiguration cmdlet 来确定 New-IntraOrganizationConnector cmdlet 所需的终结点值。
使用 Windows PowerShell 运行以下 cmdlet:
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://partner.outlook.cn/powershell-liveid/ -Credential $UserCredential
Import-PSSession $Session
New-IntraOrganizationConnector -name ExchangeHybridOnlineToOnPremises -DiscoveryEndpoint <your on-premises-Autodiscover endpoint> -TargetAddressDomains <your on-premises target address>
步骤8:配置任何 availabilityaddressspace 预 Exchange 2013 SP 1服务器
当您在 Exchange 2013 之前的组织中配置混合部署时,您必须在现有 Exchange 组织中至少安装一个具有客户端访问服务器角色和邮箱服务器角色的 Exchange 2013 SP1 或更高版本的服务器。 Exchange 2013 客户端访问服务器和邮箱服务器用作前端服务器并可协调现有 Exchange 本地组织与 Exchange Online 组织之间的通信。 此通信包括本地组织与 Exchange Online 组织之间的邮件传输和消息传递功能。 我们强烈建议在您的本地组织中安装多个 Exchange 2013 服务器,以帮助提高混合部署功能的可靠性与可用性。
在与 Exchange 2013/2010 或 Exchange 2013/2007 的混合部署中,建议所有用于本地组织的面向 Internet 的前端服务器都采用运行 Exchange 2013 SP1 或更高版本的客户端访问服务器。 来自 Microsoft 365 和Exchange Online的所有 Exchange Web Services (EWS) 请求都必须连接到本地部署中的 Exchange 2013 客户端访问服务器 () 。 此外,在 Exchange Online 的本地 Exchange 组织中发起的所有 EWS 请求都必须通过运行 Exchange 2013 SP1 或更高版本的客户端访问服务器提供代理。 由于这些 Exchange 2013 客户端访问服务器必须处理此额外的传入和传出 EWS 请求,因此必须具有数量足以处理负载和提供连接冗余的 Exchange 2013 客户端访问服务器。 所需客户端访问服务器数量取决于平均 EWS 请求量并且因组织而异。
完成以下步骤之前,请确保:
-
混合前端服务器是 Exchange 2013 SP1 或更高版本
-
您有唯一的用于 Exchange 2013 服务器的外部 EWS URL。 Microsoft 365 租户必须连接到这些服务器,才能使基于云的混合功能请求正常工作。
-
服务器同时具备邮箱和客户端访问服务器角色
-
任何现有 Exchange 2010/2007 邮箱服务器和客户端访问服务器均已应用最新的累积更新 (CU) 或服务包 (SP)。
注意: 现有 Exchange 2010/2007 邮箱服务器可继续将 Exchange 2010/2007 客户端访问服务器用于非混合功能连接的前端服务器。 只有来自 Microsoft 365 租户的混合部署功能请求需要连接到 Exchange 2013 服务器。
为 Exchange 2013 之前的服务器配置传出 Exchange Web 服务代理
必须配置指向本地 Exchange 2013 SP1 客户端访问服务器的 Exchange Web 服务终结点的 AvailabilityAddressSpace。 此终结点与此前步骤 5 中列出的终结点相同,或者可以在本地 Exchange 2013 SP1 客户端访问服务器上通过运行以下 cmdlet 来确定:
Get-WebServicesVirtualDirectory | FL AdminDisplayVersion,ExternalUrl
注意: 如果返回来自多个服务器的虚拟目录信息,请确保您使用 Exchange 2013 SP 1客户端访问服务器返回的终结点。 它将显示为 admindisplayversion 参数15.0(构建847.32)或更高版本。
若要配置 availabilityaddressspace ,使用 Exchange Powershell 和企业内组织的运行以下 cmdlet :
Add-AvailabilityAddressSpace -AccessMethod InternalProxy –ProxyUrl <your on-premises External Web Services URL> -ForestName <your Office 365 service target address> -UseServiceAccount $True
怎样才能知道这是否已正常工作?
可以使用 Test_OAuthConnectivity cmdlet 验证 OAuth 配置是否正确。 此 cmdlet 验证本地 Exchange 和 Exchange Online 终结点是否可以成功对彼此发出的请求进行身份验证。
重要: 使用远程 PowerShell 连接到您的 Exchange Online 组织时,您可能必须使用 AllowClobber 参数与 Import-PSSession cmdlet 来将最新命令导入本地 PowerShell 会话中。
要验证您的本地 Exchange 组织可以成功连接到 Exchange Online,请在您的本地组织中在 Exchange PowerShell 中运行以下命令:
Test-OAuthConnectivity -Service EWS -TargetUri https://partner.outlook.cn/ews/exchange.asmx -Mailbox <On-Premises Mailbox> -Verbose | fl
若要验证Exchange Online组织是否可以成功连接到本地 Exchange 组织,请使用远程 PowerShell 连接到Exchange Online组织并运行以下命令:
Test-OAuthConnectivity -Service EWS -TargetUri <external hostname authority of your Exchange On-Premises deployment> -Mailbox <On-Premises Mailbox> -Verbose | fl
重要: 可以忽略“SMTP 地址没有与之关联的邮箱”错误。 ResultTask 参数返回一个值为 Success,这一点很重要。 例如,测试输出的最后一部分应为:
ResultType: Success
Identity: Microsoft.Exchange.Security.OAuth.ValidationResultNodeId
IsValid: True
ObjectState: New