世纪互联Office365 Exchange混合部署无法使用Microsoft Federation Gateway(MFG)查询忙闲信息问题,配置OAuth步骤

在Office365 Exchange2013混合部署环境中,Free/Busy忙/闲信息的查询可以通过两种方式:

  1. 通过Microsoft Federation Gateway以及本地和云端之间的Organizational RelationShip(由混合向导创建)
  2. 通过配置Open Authentication(OAuth)以及本地和云端的IntraOrganizationConnector来实现

而21V Office365无法使用传统的日历忙/闲信息共享(通过Microsoft Federation Gateway来进行Free/Busy lookup),21V的Office365混合环境中,Exchange 2013虽然可以创建MFG,但是无法用来做忙/闲信息的查询方式, 以下是世纪互联版(21Vianet)Office365当中手动配置OAuth的步骤,配置OAuth其实是有现成的向导来自动配置,但是有些情况下,向导配置出来后,OAuth无法工作,这种情况下,可以尝试手动配置,并且,对于本地Exchange 2013/Exchange 2010或者Exchange 2013/Exchange 2007 Mixed混合环境,也需要手动配置OAuth:

  1. 为Exchange Online组织创建授权服务器对象

在本地 Exchange Management Shell中运行以下命令

New-AuthServer -Name "MicrosoftAzureACS" -AuthMetadataUrl https://accounts.accesscontrol.chinacloudapi.cn/<yourverified-domain>/metadata/json/1

clip_image001

运行成功后,验证配置如下:

clip_image002

2. 为Exchange Online组织启用Partner Application

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

clip_image003

3. 导出本地授权证书

在此步骤中,你需要运行脚本去导出本地的授权证书,然后导入到Exchange Online

将以下文本保存到名为 ExportAuthCert.ps1. 的PowerShell脚本文件中:

$thumbprint = (get-authconfig).CurrentCertificateThumbprintif((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)

在本地Exchange Management Shell当中运行脚本,如下图:

clip_image004

4. 将本地授权证书上载到Azure Active Directory ACS

将以下脚本保存为 Azure-Auth.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 $ServiceName

New-MsolServicePrincipalCredential -AppPrincipalId $p.AppPrincipalId -Type asymmetric -Usage Verify -Value $credValue

然后使用 Azure AD powershell 运行脚本(在弹出窗口输入Office365全局管理员账号密码 )

clip_image005

5. 使用Azure Active Directory为外部本地Exchange HTTP端点注册所有主机名颁发机构

在此步骤中,您必须为每一台发布到公网的本地Exchange服务器运行此脚本,建议使用通配符,例:假设可通过 https://mail.contoso.com/ews/exchange.asmx从外部访问Exchange。在这种情况下,就可以使用 *.contoso.com,可以涵盖autodiscover.contoso.com和mail.contoso.com端点。不过,不会涵盖顶级域contoso.com,如果Exchange 2013客户端访问服务器可通过顶级主机名颁发机构从外部访问,则您必须也将该主机名颁发机构注册为contoso.com.

将以下脚本保存为 RegisterEndpoints.ps1

$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;

在Azure AD PowerShell当中运行脚本:

clip_image006

6. 创建从本地到Office365的IntraOrganizationConnector

在本地Exchange PowerShell运行以下命令:

New-IntraOrganizationConnector -name ExchangeHybridOnPremisesToOnline -DiscoveryEndpoint https://partner.outlook.cn/autodiscover/autodiscover.svc-TargetAddressDomains <contoso.partner.mail.onmschina.cn>

验证

clip_image007

7. 创建从Office365到本地的IntraOrganizationConnector

首先将Windows PowerShell连接到Exchange online(步骤https://technet.microsoft.com/en-us/library/jj984289(v=exchg.160).aspx), 然后运行以下命令:

New-IntraOrganizationConnector -name ExchangeHybridOnlineToOnPremises -DiscoveryEndpoint https://autodiscover.contoso.com/autodiscover/autodiscover.svc-TargetAddressDomains contoso.com

验证配置:

clip_image008

8. 为Exchange 2013 SP1之前的服务器配置AvailabilityAddressSpace

如果您本地有Exchange 2013 SP1之前版本的Exchange服务器,如Exchange 2010,请先确保您为这些服务器安装了最新的RU补丁,然后配置如下的Address Space

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

验证配置

clip_image009

现在,您已配置完成,可以用以下步骤验证OAuth

在 Exchange 2013 server, 运行以下命令:

Test-OAuthConnectivity -Service EWS -TargetUri https://partner.outlook.cn/ews/exchange.asmx-Mailbox <On-Premises Mailbox> -Verbose | fl

验证结果输出为Success

clip_image010

2. 在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 | fl

clip_image011

现在,您可以测试Free/Busy忙/闲信息共享是否工作正常(例:本地邮箱可以看O365邮箱的日历忙/闲,O365邮箱可以看本地邮箱的日历忙闲信息)

Eltarish

合作伙伴技术顾问