Exchange Server 2019 CU13 发布后,Exchange Server支持 OAuth 2.0 (也称为新式或现代身份验证) ,适用于使用 ADFS 作为安全令牌服务 (STS) 的纯本地环境。

先说下先决条件,至少需要Windows Server 2019的英文版ADFS、域控的林架构为Windows Server 2016,因为ADFS的设备注册要求必须是Windows Server 2016的架构级别,Exchange Server 2019 CU13以上版本

若要使用新式身份验证,用户需要客户端 (Outlook 或支持使用 ADFS 进行新式身份验证的任何其他本机 OS 客户端) 。 Exchange Server 2019中的新式(现代)身份验证不应与混合新式身份验证混淆,后者使用 Microsoft Entra ID 进行新式身份验证。此新功能允许没有Microsoft Entra ID或不在 Exchange 混合配置中的客户使用新式身份验证。

若要在本地 Exchange 环境中启用新式身份验证,需要在 Windows Server 2019 或更高版本上Active Directory 联合身份验证服务 (ADFS) 。从公司网络外部的客户端访问还需要搭建Windows Server 2019 或更高版本上的 Web 应用程序代理

Exchange Server 2019 CU14的环境已经就绪,企业颁发的通配符证书也就绪,那么就开始部署ADFS吧

Exchange Server 2019启用现代身份验证_Windows Server

Exchange Server 2019启用现代身份验证_Modern Auth_02

Exchange Server 2019启用现代身份验证_Windows Server_03

Exchange Server 2019启用现代身份验证_Modern Auth_04

Exchange Server 2019启用现代身份验证_Windows Server_05

联合身份验证服务显示名称后来改成了Basehome Auth

Exchange Server 2019启用现代身份验证_现代身份验证_06

这里用到了gMSA组托管服务账户

Exchange Server 2019启用现代身份验证_Modern Auth_07

Exchange Server 2019启用现代身份验证_Exchange Server_08

Exchange Server 2019启用现代身份验证_Windows Server_09

Exchange Server 2019启用现代身份验证_Modern Auth_10

Exchange Server 2019启用现代身份验证_现代身份验证_11

在IE浏览器兼容模式下验证下ADFS工作状态是否正常

https://fs.basehome.com.cn/federationmetadata/2007-06/federationmetadata.xml

Exchange Server 2019启用现代身份验证_Modern Auth_12

接下来使用 ADFS 作为 STS 在 Exchange Server 中配置新式身份验证,使用 ADFS 配置新式身份验证的以下步骤仅适用于非 Exchange 混合 (纯本地) 模式

检查或设置WEB SSO的生存期时间,这里的时间就是用于现代设备身份验证的账户在新设备第一次验证登录后持续多久再次验证一次身份的时间间隔

Exchange Server 2019启用现代身份验证_Modern Auth_13

确认为 Extranet 和 Intranet 选择表单身份验证

Exchange Server 2019启用现代身份验证_现代身份验证_14

配置设备注册,执行此步骤以减少用户的身份验证提示数,如果你的AD林架构不是Windows Server 2016,那么会报错,提示你必须AD架构为2019

Exchange Server 2019启用现代身份验证_Exchange Server_15

Exchange Server 2019启用现代身份验证_Windows Server_16

Exchange Server 2019启用现代身份验证_现代身份验证_17

创建适用于 Outlook 的 ADFS 应用程序组

Exchange Server 2019启用现代身份验证_Windows Server_18

输入名称

Exchange Server 2019启用现代身份验证_现代身份验证_19

为 Outlook 添加以下内容的“客户端标识符”和“重定向URL” ,然后单击“下一步”

客户端标识符d3590ed6-52b3-4102-aeff-aad2292ab01c

重定向URL

urn:ietf:wg:oauth:2.0:oob

ms-appx-web://Microsoft.AAD.BrokerPlugin/d3590ed6-52b3-4102-aeff-aad2292ab01c

Exchange Server 2019启用现代身份验证_Exchange Server_20

添加 Exchange 环境使用的所有 FQDN,包括自动发现、负载均衡 FQDN、服务器 FQDN 等,均为https打头,/结尾

https://autodiscover.basehome.com.cn/

https://mail.basehome.com.cn/

Exchange Server 2019启用现代身份验证_Exchange Server_21

Exchange Server 2019启用现代身份验证_现代身份验证_22

在“配置应用程序权限”中,选择“本机应用程序应用程序”,然后在“允许的范围”下,除了默认情况下选中的 openid 之外,还需要勾选 user_impersonation

Exchange Server 2019启用现代身份验证_Modern Auth_23

继续下一步直至完成

Exchange Server 2019启用现代身份验证_Modern Auth_24

在 Outlook 应用程序组中添加发布转换规则

Exchange Server 2019启用现代身份验证_Windows Server_25

Exchange Server 2019启用现代身份验证_Windows Server_26

在“颁发转换规则”里添加如下规则

Claim Rule Name

Custom Rule


ActiveDirectoryUserSID

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"] => issue(claim = c);

ActiveDirectoryUPN

c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"] => issue(claim = c);

AppIDACR

=> issue(Type = "appidacr", Value = "2");

SCP

=> issue(Type = "http://schemas.microsoft.com/identity/claims/scope", Value ="user_impersonation");

创建的过程以第一个为例,剩下的三个都一样的方法

Exchange Server 2019启用现代身份验证_现代身份验证_27

Exchange Server 2019启用现代身份验证_Exchange Server_28

添加规则后,Outlook - Web API 属性应如下所示:

Exchange Server 2019启用现代身份验证_Windows Server_29

接下来就是搞搞Windows客户端系统了:

在部署到所有用户之前先用少数用户测试现代身份验证,仅 Windows 上的 Outlook 支持现代身份验证。要使用现代身份验证,必须在具有 2023 年 3 月 14 日更新或更高版本的 Windows 11 操作系统 22H2 上安装 Outlook 2021零售版客户端(这里我以纯本地环境为优先,O365或M365的版本也可以,但我就不介绍了)

Exchange Server 2019启用现代身份验证_Exchange Server_30

Office 2021必须是2304(16327.20214)以上版本(批量许可版本无法达到这个版本号)

Exchange Server 2019启用现代身份验证_Windows Server_31

客户端计算机中的注册表更改,管理员需要为用户配置注册表值。启用现代身份验证并将您的 ADFS 域添加为 Outlook 中的受信任域:

添加以下键以将 ADFS 域添加为受信任域

准备一个reg文件AuthTrustedDomains.reg,内容如下

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\AAD]

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains]

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains\https://fs.basehome.com.cn]

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\AAD\AuthTrustedDomains\https://fs.basehome.com.cn/]

双击执行,添加的效果如下:

Exchange Server 2019启用现代身份验证_现代身份验证_32

要在 Windows 上的 Outlook 中通过 ADFS 启用现代身份验证,请添加以下内容

REG_DWORD

EnableExchangeOnPremModernAuth

1

Exchange Server 2019启用现代身份验证_Windows Server_33

回到Exchange Server 2019服务器

为最终用户创建身份验证策略

组织中的所有用户可能没有支持使用 ADFS 的新式身份验证的电子邮件客户端。在这种情况下,我们建议您为已支持客户端的用户启用现代身份验证,并阻止不支持的客户端的现代身份验证用户。

要为一组用户启用现代身份验证并为其余用户阻止现代身份验证,您需要创建至少两个身份验证策略:

  • 默认情况下阻止现代身份验证的组织范围策略。
  • 第二个策略是有选择地允许某些用户进行现代身份验证。

创建组织级策略以默认阻止现代身份验证Block Modern auth

New-AuthenticationPolicy "Block Modern auth" -BlockModernAuthWebServices -BlockModernAuthActiveSync -BlockModernAuthAutodiscover -BlockModernAuthImap -BlockModernAuthMapi -BlockModernAuthOfflineAddressBook -BlockModernAuthPop -BlockModernAuthRpc

Exchange Server 2019启用现代身份验证_Exchange Server_34

Get-AuthenticationPolicy -Identity "Block Modern auth"

Exchange Server 2019启用现代身份验证_Exchange Server_35

使用此命令设置组织级别默认策略为Block Modern auth

Set-OrganizationConfig -DefaultAuthenticationPolicy "Block Modern auth"

创建用户级身份验证策略以启用现代身份验证

New-AuthenticationPolicy "Allow Modern auth"

Exchange Server 2019启用现代身份验证_Exchange Server_36

配置 Exchange Server 以使用 ADFS OAuth 令牌

检查虚拟目录是否启用了 oauth

Get-MapiVirtualDirectory -Server exch2019 | fl *auth*

Get-WebServicesVirtualDirectory -Server exch2019 | fl *auth*

Get-OabVirtualDirectory -Server exch2019 | fl *auth*

Get-AutodiscoverVirtualDirectory -Server exch2019 | fl *auth*

Exchange Server 2019启用现代身份验证_Windows Server_37

在 Exchange Server for ADFS 中创建新的身份验证服务器对象

New-AuthServer -Type ADFS -Name ADFSAuth -AuthMetadataUrl https://fs.basehome.com.cn/FederationMetadata/2007-06/FederationMetadata.xml

做到这一步没法继续了,原因查了很久发现必须使用英文版的Windows Server 2019 ADFS才行,哪怕是中文版Windows Server 2019安装英文语言包也不行!!!(这里我的Exchange Server 2019 CU14中文版本安装在Windows Server 2019中文版上)

Exchange Server 2019启用现代身份验证_Modern Auth_38

没办法,之前ADFS按照上面的步骤重做一遍就好了;PS:我这样反复折腾了多次才知道这个坑,你看到很幸运了

Exchange Server 2019启用现代身份验证_Exchange Server_39

将我们刚刚添加的身份验证服务器设置为DefaultAuthorizationEndpoint.当公布 Modern auth 标头时,Exchange Server 公布DefaultAuthorizationEndpoint.这就是客户端如何知道使用哪个端点进行身份验证的方式。

Set-AuthServer -Identity ADFSAuth -IsDefaultAuthorizationEndpoint $true

运行此命令以在组织级别启用现代身份验证

Set-OrganizationConfig -OAuth2ClientProfileEnabled $true

Exchange Server 2019启用现代身份验证_Modern Auth_40

通过分配身份验证策略,为具有受支持客户端的用户启用现代身份验证Allow Modern auth

这里只是为lisi这个账户开启了现代身份验证模式,其他用户还是默认保持不变未采用现在身份验证模式

Set-User -Identity lisi -AuthenticationPolicy "Allow Modern auth"

Exchange Server 2019启用现代身份验证_Windows Server_41

Tips:新装的Exchange Server 2019还是保持默认的OutlookAnywhere配置

Exchange Server 2019启用现代身份验证_Windows Server_42

现在已经调整了配置,因此更改最多需要 30 分钟才能生效。如果您不想等待,请重新启动服务器或执行“iisreset”

Windows 客户端已准备好满足要求,在客户端上测试,outlook 2021在添加lisi@basehome.com.cn账户

Exchange Server 2019启用现代身份验证_Exchange Server_43

选择Exchange模式

Exchange Server 2019启用现代身份验证_Windows Server_44

见证奇迹的时刻到了:自动弹出ADFS现代身份验证对话框

Exchange Server 2019启用现代身份验证_Windows Server_45

输入密码,点击登录,就配置成功了

Exchange Server 2019启用现代身份验证_Modern Auth_46

完成后就可以正常打开邮箱了,再次打开也不会再进行现代身份验证了(可以直接设定现代身份验证登录过的设备有效时限,过了时限又要完成一次现代身份验证校验身份)

Exchange Server 2019启用现代身份验证_Exchange Server_47

接下来我们对比看看配置邮箱连接状态:

下面这张是未开启现代身份验证的zhangsan账户的

Exchange Server 2019启用现代身份验证_Modern Auth_48

下面这张是开启了现代身份验证的lisi账户的

Exchange Server 2019启用现代身份验证_Exchange Server_49

配置过程和实现的效果就到这了,还是本地 Exchange Server,但相较于传统弹框身份验证方式,连接的安全性会更高。

总结和分析

对于不想上云的传统客户继续使用本地Exchange Server的用户采用这种方式会更加安全,但版本要求非常苛刻,必须Windows 11 22H2以上版本,Office要么是云订阅版的Office,要么就是零售版的Office 2021,至于批量许可版本的Office 2021什么时候版本号能升级到2304(16327.20214)以上完全未知;当然也非常建议对安全性要求较高的客户采用ADFS实现新式(现代)身份验证,并且ADFS还可以集成整合第三方工具进一步实现在ADFS做MFA,构建条件访问安全策略登录邮箱。