当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 在 Exchange 2016 中配置 OAuth 身份验证

作者:精品下载站 日期:2024-12-14 07:06:02 浏览:15 分类:玩电脑

在 Exchange 2016 中配置 OAuth 身份验证


只要我记得混合配置向导成功完成,它就会生成有关混合配置的 OAuth 部分的错误。

[玩转系统] 在 Exchange 2016 中配置 OAuth 身份验证

HCW8064 - HCW 已完成,但无法执行混合配置的 OAuth 部分。如果您需要依赖于 OAuth 的功能,您可以尝试再次运行 HCW 或使用这些手动步骤手动配置 OAuth。

了解更多选项重定向到 Microsoft 页面配置 Exchange 和 Exchange Online 组织之间的 OAuth 身份验证。我在这篇博文中使用了该文章的 PowerShell 命令。

OAuth 用于代表用户跨界登录其他服务。因此,如果您登录到某些 Microsoft 服务,则该服务可以使用 OAuth 访问本地 Exchange 中的服务,反之亦然。

这些跨界服务的示例包括:

  • 消息记录管理 (MRM)。
  • 交换就地电子取证。
  • 交换就地存档。
  • 团队日历。

HCW 可以配置 Azure Active Directory 进行 OAuth 身份验证,可以创建 IntraOrganizationConnectors,但无法在 Exchange 服务器上导出和导入(自签名)证书,也不能(或确实)在 Active 中创建授权服务器对象目录。因此,是时候进行测试了,以 Microsoft 文章为指导并写下我的经验。

注意。这仅适用于 Exchange 2013 及更高版本,我一直在 Exchange 2016 和 Exchange 2019 的混合环境中进行此工作。

在 Office 365 和 Exchange Online 之间配置 OAuth 涉及多个步骤。

在本地 Exchange 中创建授权服务器对象

要在本地环境中创建授权服务器对象,请在 Exchange 命令行管理程序中输入以下命令。

New-AuthServer -Name "WindowsAzureACS" -AuthMetadataUrl "https://accounts.accesscontrol.windows.net/contoso.com/metadata/json/1"
New-AuthServer -Name "evoSTS" -Type AzureAD -AuthMetadataUrl https://login.windows.net/contoso.com/federationmetadata/2007-06/federationmetadata.xml

您已验证的域 contoso.com(在命令中)应类似于 Exchangelabs.nl,而不是 Microsoft 文章中概述的 。

[玩转系统] 在 Exchange 2016 中配置 OAuth 身份验证

启用合作伙伴应用程序以与 Exchange Online 一起使用

合作伙伴应用程序是在上一步(第一个命令)中创建的,应该启用它。在 Exchange 命令行管理程序(本地)中使用以下命令执行此操作:

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

导出Exchange授权证书

跨界身份验证使用证书,因此需要将本地证书导出到 Azure Active Directory。如果您想知道在 Exchange 命令行管理程序中运行 Get-ExchangeCertificate 命令时 CN=Microsoft Exchange Server Auth Certificate 证书来自何处,请参阅这里。

使用以下 PowerShell 命令并将它们存储在名为 ExportAuthCert.ps1 或其他内容的 PowerShell 脚本中并运行它。这应该将 OAuth 证书导出到名为 OAuthCert.cer 的文件。

$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) | ?{$_.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 2016 中配置 OAuth 身份验证

注意。 Export-ExchangeCertificate 命令在这种情况下不起作用,因为自签名证书不可导出。

将 Exchange 授权证书导入到 Azure AD

下一步是将 OAuthCert.cer 证书导入到 Azure AD。连接到 Microsoft Online 服务(Connect-MSOLService,如果您没有安装此服务,可以使用 Install-Module MSOnline 命令)并在连接后运行以下命令:

$Cred = Get-Credential
Connect-MSOLService -Credential $Cred
$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

这会将自签名证书从 Exchange 服务器导入到 Azure AD,以便可用于相互身份验证。

我没有在 Exchange 服务器上运行上述命令,而是在 Azure AD Connect 服务器上运行,因为 MSOL 模块已加载到该服务器上。为了导入证书文件,我必须使用以下命令访问证书文件(而不是 $ENV:System 变量):

$CertFile = "\AMS-EXCH01\C$\OAuthConfig\OAuthCert.cer"

在 Azure Active Directory 中注册端点

最后一步是将本地 Exchange 环境的端点注册到 Azure Active Directory 中。您可以使用以下命令来注册端点:

$ServiceName = "00000002-0000-0ff1-ce00-000000000000";
$x = Get-MsolServicePrincipal -AppPrincipalId $ServiceName;
$x.ServicePrincipalnames.Add("https://webmail.exchangeserver.com/");
$x.ServicePrincipalnames.Add("https://autodiscover.exchangeserver.com/");
Set-MSOLServicePrincipal -AppPrincipalId $ServiceName -ServicePrincipalNames $x.ServicePrincipalNames;

您必须使用自己的 Exchange 服务器本地 FQDN(如下面的验证屏幕截图所示),而不是 webmail.exchangeserver.com 和 Autodiscover.exchangeserver.com。

您可以使用以下命令来检查配置是否正确。

Get-MsolServicePrincipal -AppPrincipalId 00000002-0000-0ff1-ce00-000000000000 | select -ExpandProperty ServicePrincipalNames

如下图所示:

[玩转系统] 在 Exchange 2016 中配置 OAuth 身份验证

注意。多年来,我曾多次担任 HCW。域已在 Azure Active Directory 中添加,但未(自动)删除。

组织内连接器和可用性地址空间

混合配置向导创建了 IntraOrganizationConnectors(在 Exchange 2016 和 Exchange Online 中)并配置了 AvailabilityAddressSpace。无需创建这些,但您必须使用 Get-IntraOrganizationConnectorGet-AvailabilityAddressSpace 命令检查它们)

验证 OAuth 配置

要验证 OAuth 配置,您可以使用 Test-OAuthConnectivity 命令。您必须在本地 Exchange 服务器和 Exchange Online 中执行此操作。

本地 Exchange 服务器上使用 Exchange Online Uri本地邮箱

Test-OAuthConnectivity -Service EWS -TargetUri https://outlook.office365.com/ews/exchange.asmx -Mailbox [email protected] -Verbose | Format-List

Exchange Online 中,将 Exchange 本地 UriExchange Online 中的邮箱结合使用:

Test-OAuthConnectivity -Service EWS -TargetUri https://webmail.exchangeserver.com/metadata/json/1 -Mailbox [email protected] -Verbose | Format-List

输出是一个扩展列表,但最终您应该在控制台上看到 ResultType: SuccessIsValid:True

[玩转系统] 在 Exchange 2016 中配置 OAuth 身份验证

您现在已配置 Exchange Online 和 Exchange On-Premises 之间的 OAuth。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯