世纪互联Office365 Exchange混合部署无法使用Microsoft Federation Gateway(MFG)查询忙闲信息问题,配置OAuth步骤
在Office365 Exchange2013混合部署环境中,Free/Busy忙/闲信息的查询可以通过两种方式:
- 通过Microsoft Federation Gateway以及本地和云端之间的Organizational RelationShip(由混合向导创建)
- 通过配置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:
- 为Exchange Online组织创建授权服务器对象
在本地 Exchange Management Shell中运行以下命令
New-AuthServer -Name "MicrosoftAzureACS" -AuthMetadataUrl https://accounts.accesscontrol.chinacloudapi.cn/<yourverified-domain>/metadata/json/1
运行成功后,验证配置如下:
2. 为Exchange Online组织启用Partner Application
Get-PartnerApplication | ?{$_.ApplicationIdentifier -eq "00000002-0000-0ff1-ce00-000000000000"-and $_.Realm -eq ""} | Set-PartnerApplication -Enabled $true
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当中运行脚本,如下图:
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全局管理员账号密码 )
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当中运行脚本:
6. 创建从本地到Office365的IntraOrganizationConnector
在本地Exchange PowerShell运行以下命令:
New-IntraOrganizationConnector -name ExchangeHybridOnPremisesToOnline -DiscoveryEndpoint https://partner.outlook.cn/autodiscover/autodiscover.svc-TargetAddressDomains <contoso.partner.mail.onmschina.cn>
验证
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
验证配置:
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
验证配置
现在,您已配置完成,可以用以下步骤验证OAuth
在 Exchange 2013 server, 运行以下命令:
Test-OAuthConnectivity -Service EWS -TargetUri https://partner.outlook.cn/ews/exchange.asmx-Mailbox <On-Premises Mailbox> -Verbose | fl
验证结果输出为Success
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
现在,您可以测试Free/Busy忙/闲信息共享是否工作正常(例:本地邮箱可以看O365邮箱的日历忙/闲,O365邮箱可以看本地邮箱的日历忙闲信息)