在 Exchange Online 中禁用基本身份验证

重要

从 2022 年 12 月起,经典 Exchange 管理中心已在全球客户中弃用。 Microsoft建议使用 新的 Exchange 管理中心(如果尚未这样做)。

虽然大多数功能已迁移到新的 EAC,但某些功能已迁移到其他管理中心,其余功能将很快迁移到新 EAC。 在“其他功能”中找到新 EAC 中尚不存在的功能,或使用全局搜索来帮助你在新 EAC 中导航。

注意

如果已在组织中启用 安全默认值 ,则 Exchange Online 中已禁用基本身份验证。 有关详细信息,请参阅 Microsoft Entra ID 中的安全默认值

如果由于基本身份验证在租户中不起作用而到达此页,并且你尚未设置安全默认值或身份验证策略,则可能已在租户中禁用了基本身份验证,作为我们更广泛的计划的一部分,以提高跨 Exchange Online 的安全性。 在邮件中心查看有关基本身份验证的任何文章,并阅读 基本身份验证和 Exchange Online ,了解有关基本身份验证的最新公告。

Exchange Online 中的基本身份验证使用用户名和密码进行客户端访问请求。 阻止基本身份验证有助于保护 Exchange Online 组织免受暴力攻击或密码喷射攻击。 在 Exchange Online 中为用户禁用基本身份验证时,其电子邮件客户端和应用必须支持新式身份验证。 这些客户端包括:

如果组织没有旧电子邮件客户端,则可以使用 Exchange Online 中的身份验证策略来禁用基本身份验证请求。 禁用基本身份验证会强制所有客户端访问请求使用新式身份验证。 有关新式身份验证的详细信息,请参阅 对 Office 客户端使用新式身份验证

本主题说明如何在 Exchange Online 中使用和阻止基本身份验证,以及身份验证策略的相应过程。

Exchange Online 中基本身份验证的工作原理

基本身份验证也称为 代理身份验证 ,因为电子邮件客户端将用户名和密码传输到 Exchange Online,Exchange Online 代表电子邮件客户端或应用将凭据转发或 代理 到权威标识提供者 (IdP) 。 IdP 取决于组织的身份验证模型:

  • 云身份验证:IdP Microsoft Entra ID。
  • 联合身份验证:IdP 是一种本地解决方案,例如 Active Directory 联合身份验证服务 (AD FS) 。

以下部分介绍了这些身份验证模型。 有关详细信息,请参阅 为 Microsoft Entra 混合标识解决方案选择正确的身份验证方法

云身份验证

下图介绍了云身份验证中的步骤:

基于云的身份验证以及阻止基本身份验证的基本步骤。

  1. 电子邮件客户端将用户名和密码发送到 Exchange Online。

    注意:阻止基本身份验证时,此步骤将阻止该身份验证。

  2. Exchange Online 将用户名和密码发送到Microsoft Entra ID。

  3. Microsoft Entra ID 将用户票证返回到 Exchange Online,并且用户已经过身份验证。

联合身份验证

下图介绍了联合身份验证中的步骤:

联合身份验证的基本步骤,以及阻止基本身份验证的基本步骤。

  1. 电子邮件客户端将用户名和密码发送到 Exchange Online。

    注意:阻止基本身份验证时,此步骤将阻止该身份验证。

  2. Exchange Online 将用户名和密码发送到本地 IdP。

  3. Exchange Online 从本地 IdP 接收安全断言标记语言 (SAML) 令牌。

  4. Exchange Online 将 SAML 令牌发送到 Microsoft Entra ID。

  5. Microsoft Entra ID 将用户票证返回到 Exchange Online,并且用户已经过身份验证。

如何在 Exchange Online 中阻止基本身份验证

通过创建身份验证策略并将其分配给单个用户,在 Exchange Online 中阻止基本身份验证。 策略定义阻止基本身份验证的客户端协议,并将策略分配给一个或多个用户会阻止其针对指定协议的基本身份验证请求。

阻止时,在请求 Microsoft到达 entra ID 或本地 IdP 之前,Exchange Online 中的第一个预身份验证步骤 (第 1 步) 阻止 Exchange Online 中的基本身份验证。 此方法的好处是暴力攻击或密码喷射攻击不会到达 IdP (这可能会由于) 不正确的登录尝试而触发帐户锁定。

由于身份验证策略在用户级别运行,因此 Exchange Online 只能阻止云组织中存在的用户的基本身份验证请求。 对于联合身份验证,如果 Exchange Online 中不存在用户,用户名和密码将转发到本地 IdP。 例如,请考虑以下情况。

  1. 组织具有联合域 contoso.com 并使用本地 AD FS 进行身份验证。

  2. 用户 ian@contoso.com 存在于本地组织中,但不存在于 Office 365 或 Microsoft 365 中, (Microsoft Entra ID 中没有用户帐户,Exchange Online 全局地址列表中) 没有收件人对象。

  3. 电子邮件客户端使用用户名 ian@contoso.com向 Exchange Online 发送登录请求。 无法将身份验证策略应用于用户,并且 的 ian@contoso.com 身份验证请求将发送到本地 AD FS。

  4. 本地 AD FS 可以接受或拒绝的 ian@contoso.com身份验证请求。 如果接受请求,则 SAML 令牌将返回到 Exchange Online。 只要 SAML 令牌的 ImmutableId 值与 Microsoft Entra ID 中的用户匹配,Microsoft Entra ID 将向 Exchange Online 颁发用户票证, (在 Microsoft Entra Connect 设置过程中设置 immutableId 值) 。

在此方案中,如果 contoso.com 使用本地 AD FS 服务器进行身份验证,则本地 AD FS 服务器仍将在密码喷射攻击期间接收来自 Exchange Online 中不存在用户名的身份验证请求。

在 Exchange 混合部署中,本地邮箱的身份验证将由本地 Exchange 服务器处理,身份验证策略将不适用。 对于移动到 Exchange Online 的邮箱,自动发现服务会将其重定向到 Exchange Online,然后会应用前面的一些方案。

Exchange Online 中的身份验证策略过程

在 Exchange Online PowerShell 中管理身份验证策略的所有方面。 下表介绍了 Exchange Online 中可阻止其基本身份验证的协议和服务。

协议或服务 说明 参数名称
Exchange Active Sync (EAS) 由移动设备上的某些电子邮件客户端使用。 AllowBasicAuthActiveSync
自动发现 由 Outlook 和 EAS 客户端用来查找和连接到 Exchange Online 中的邮箱 AllowBasicAuthAutodiscover
IMAP4 由 IMAP 电子邮件客户端使用。 AllowBasicAuthImap
MAPI over HTTP (MAPI/HTTP) 由 Outlook 2010 及更高版本使用。 AllowBasicAuthMapi
脱机通讯簿 (OAB) Outlook 下载并使用的地址列表集合的副本。 AllowBasicAuthOfflineAddressBook
Outlook 服务 由 Windows 10 的“邮件和日历”应用使用。 AllowBasicAuthOutlookService
POP3 由 POP 电子邮件客户端使用。 AllowBasicAuthPop
Reporting Web Services 用于检索 Exchange Online 中的报表数据。 AllowBasicAuthReportingWebServices
Outlook Anywhere(HTTP 上的 RPC) 由 Outlook 2016 及更早版本使用。 AllowBasicAuthRpc
经过身份验证的 SMTP 由 POP 和 IMAP 客户端用来发送电子邮件。 AllowBasicAuthSmtp
Exchange Web 服务 (EWS) Outlook、Outlook for Mac 和第三方应用使用的编程接口。 AllowBasicAuthWebServices
PowerShell 用于使用远程 PowerShell 连接到 Exchange Online。 有关说明,请参阅连接 PowerShell Exchange Online AllowBasicAuthPowerShell

通常,在阻止用户的基本身份验证时,建议阻止所有协议的基本身份验证。 但是,可以使用 New-AuthenticationPolicy 和 Set-AuthenticationPolicy cmdlet 上的 AllowBasicAuth* 参数 (开关) ,有选择地允许或阻止特定协议的基本身份验证。

对于不支持新式身份验证的电子邮件客户端和应用,需要允许对它们所需的协议和服务进行基本身份验证。 下表介绍了这些协议和服务:

客户端 协议和服务
较旧的 EWS 客户端
  • 自动发现
  • EWS
较旧的 ActiveSync 客户端
  • 自动发现
  • ActiveSync
POP 客户端
  • POP3
  • 经过身份验证的 SMTP
IMAP 客户端
  • IMAP4
  • 经过身份验证的 SMTP
Outlook 2010
  • 自动发现
  • MAPI over HTTP
  • 脱机通讯簿
  • Outlook Anywhere(HTTP 上的 RPC)
  • Exchange Web 服务 (EWS)

注意

阻止基本身份验证将阻止 Exchange Online 中的应用密码。 有关应用密码的详细信息,请参阅 创建应用密码

开始前,有必要了解什么?

创建和应用身份验证策略

创建和应用身份验证策略以阻止 Exchange Online 中基本身份验证的步骤如下:

  1. 创建身份验证策略。

  2. 将身份验证策略分配给用户。

  3. 等待 24 小时,以便将策略应用于用户,或强制立即应用策略。

以下步骤在以下部分中介绍。

步骤 1:创建身份验证策略

若要创建阻止 Exchange Online 中所有可用客户端协议的基本身份验证的策略, (建议的配置) ,请使用以下语法:

New-AuthenticationPolicy -Name "<Descriptive Name>"

此示例创建名为“阻止基本身份验证”的身份验证策略。

New-AuthenticationPolicy -Name "Block Basic Auth"

有关详细语法和参数信息,请参阅 New-AuthenticationPolicy

注意

  • 创建策略后,无法更改该策略的名称, (Set-AuthenticationPolicy cmdlet) 上不提供 Name 参数。

  • 若要为策略中的特定协议启用基本身份验证,请参阅本主题后面的 修改身份验证策略 部分。 New-AuthenticationPolicySet-AuthenticationPolicy cmdlet 上提供了相同的协议设置,并且为特定协议启用基本身份验证的步骤对于这两个 cmdlet 都是相同的。

步骤 2:向用户分配身份验证策略

本部分介绍了可用于向用户分配身份验证策略的方法:

  • 单个用户帐户:使用以下语法:

    Set-User -Identity <UserIdentity> -AuthenticationPolicy <PolicyIdentity>
    

    本示例将名为“阻止基本身份验证”的策略分配给用户帐户 laura@contoso.com。

    Set-User -Identity laura@contoso.com -AuthenticationPolicy "Block Basic Auth"
    
  • 按属性筛选用户帐户:此方法要求用户帐户都共享唯一的可筛选属性 (例如可用于标识用户的 Title 或 Department) 。 语法使用以下命令 (两个来标识用户帐户,使用另一个命令将策略应用于这些用户) :

    $<VariableName1> = Get-User -ResultSize unlimited -Filter <Filter>
    $<VariableName2> = $<VariableName1>.MicrosoftOnlineServicesID
    $<VariableName2> | foreach {Set-User -Identity $_ -AuthenticationPolicy "Block Basic Auth"}
    

    此示例将名为 Block Basic Auth 的策略分配给其 Title 属性包含值“Sales Associate”的所有用户帐户。

    $SalesUsers = Get-User -ResultSize unlimited -Filter "(RecipientType -eq 'UserMailbox') -and (Title -like '*Sales Associate*')"
    $Sales = $SalesUsers.MicrosoftOnlineServicesID
    $Sales | foreach {Set-User -Identity $_ -AuthenticationPolicy "Block Basic Auth"}
    
  • 使用特定用户帐户的列表:此方法需要一个文本文件来标识用户帐户。 例如,不包含空格的值 (Office 365 或 Microsoft 365 工作或学校帐户) 效果最佳。 文本文件的每一行上必须包含一个用户帐户,如下所示:

    akol@contoso.com
    tjohnston@contoso.com
    kakers@contoso.com

    语法使用以下两个命令 (一个用于标识用户帐户,另一个用于将策略应用于这些用户) :

    $<VariableName> = Get-Content "<text file>"
    $<VariableName> | foreach {Set-User -Identity $_ -AuthenticationPolicy <PolicyIdentity>}
    

    此示例将名为 Block Basic Auth 的策略分配给文件 C:\My Documents\BlockBasicAuth.txt 中指定的用户帐户。

    $BBA = Get-Content "C:\My Documents\BlockBasicAuth.txt"
    $BBA | foreach {Set-User -Identity $_ -AuthenticationPolicy "Block Basic Auth"}
    
  • 筛选同步到 Exchange Online 的本地 Active Directory 用户帐户:有关详细信息,请参阅本主题中的 筛选同步到 Exchange Online 的本地 Active Directory 用户帐户 部分。

注意

若要从用户中删除策略分配,请在 Set-User cmdlet 上使用 AuthenticationPolicy 参数的值$null

步骤 3: (可选) 立即向用户应用身份验证策略

默认情况下,在用户上创建或更改身份验证策略分配或更新策略时,更改将在 24 小时内生效。 如果希望策略在 30 分钟内生效,请使用以下语法:

Set-User -Identity <UserIdentity> -STSRefreshTokensValidFrom $([System.DateTime]::UtcNow)

此示例立即将身份验证策略应用于用户 laura@contoso.com。

Set-User -Identity laura@contoso.com -STSRefreshTokensValidFrom $([System.DateTime]::UtcNow)

此示例立即将身份验证策略应用于以前由可筛选属性或文本文件标识的多个用户。 如果仍处于同一 PowerShell 会话中,并且尚未更改用于标识用户的变量, (之后未将同一变量名称用于其他目的) ,则此示例有效。 例如:

$Sales | foreach {Set-User -Identity $_ -STSRefreshTokensValidFrom $([System.DateTime]::UtcNow)}

$BBA | foreach {Set-User -Identity $_ -STSRefreshTokensValidFrom $([System.DateTime]::UtcNow)}

查看身份验证策略

若要查看所有现有身份验证策略的名称的摘要列表,请运行以下命令:

Get-AuthenticationPolicy | Format-Table Name -Auto

若要查看有关特定身份验证策略的详细信息,请使用以下语法:

Get-AuthenticationPolicy -Identity <PolicyIdentity>

此示例返回有关名为“阻止基本身份验证”的策略的详细信息。

Get-AuthenticationPolicy -Identity "Block Basic Auth"

有关详细语法和参数信息,请参阅 Get-AuthenticationPolicy

修改身份验证策略

默认情况下,在不指定任何协议的情况下创建新的身份验证策略时,将阻止 Exchange Online 中的所有客户端协议进行基本身份验证。 换句话说,开关) (AllowBasicAuth* 参数的 False 默认值适用于所有协议。

  • 若要为禁用的特定协议启用基本身份验证,请指定不带值的开关。

  • 若要对启用的特定协议禁用基本身份验证,只能使用值 :$false

可以使用 Get-AuthenticationPolicy cmdlet 查看策略中 AllowBasicAuth* 交换机的当前状态。

本示例为 POP3 协议启用基本身份验证,并在名为“阻止基本身份验证”的现有身份验证策略中禁用 IMAP4 协议的基本身份验证。

Set-AuthenticationPolicy -Identity "Block Basic Auth" -AllowBasicAuthPop -AllowBasicAuthImap:$false

有关详细语法和参数信息,请参阅 Set-AuthenticationPolicy

配置默认身份验证策略

默认身份验证策略分配给尚未向其分配特定策略的所有用户。 请注意,分配给用户的身份验证策略优先于默认策略。 若要配置组织的默认身份验证策略,请使用以下语法:

Set-OrganizationConfig -DefaultAuthenticationPolicy <PolicyIdentity>

此示例将名为“阻止基本身份验证”的身份验证策略配置为默认策略。

Set-OrganizationConfig -DefaultAuthenticationPolicy "Block Basic Auth"

注意

若要删除默认身份验证策略指定,请使用 DefaultAuthenticationPolicy 参数的值$null

使用以下示例验证是否已配置默认身份验证策略。

Get-OrganizationConfig | Format-Table DefaultAuthenticationPolicy

删除身份验证策略

若要删除现有身份验证策略,请使用以下语法:

Remove-AuthenticationPolicy -Identity <PolicyIdentity>

此示例删除名为“测试身份验证策略”的策略。

Remove-AuthenticationPolicy -Identity "Test Auth Policy"

有关详细语法和参数信息,请参阅 Remove-AuthenticationPolicy

如何知道已在 Exchange Online 中成功禁用基本身份验证?

若要确认身份验证策略是否已直接应用于用户,请执行以下操作:

注意

请注意,可能已配置默认身份验证策略。 有关详细信息 ,请参阅配置默认身份验证策略

  1. 运行以下命令,查找身份验证策略的可分辨名称 (DN) 值:

    Get-AuthenticationPolicy | Format-List Name,DistinguishedName
    
  2. 在以下命令中使用身份验证策略的 DN 值:

    Get-User -Filter "AuthenticationPolicy -eq '<AuthPolicyDN>'"
    

    例如:

    Get-User -Filter "AuthenticationPolicy -eq 'CN=Block Basic Auth,CN=Auth Policies,CN=Configuration,CN=contoso.onmicrosoft.com,CN=ConfigurationUnits,DC=NAMPR11B009,DC=PROD,DC=OUTLOOK,DC=COM'"
    

当身份验证策略阻止来自 Exchange Online 中特定协议的特定用户的基本身份验证请求时,响应为 401 Unauthorized。 不会向客户端返回任何其他信息,以避免泄露有关被阻止用户的任何其他信息。 响应示例如下所示:

HTTP/1.1 401 Unauthorized
Server: Microsoft-IIS/10.0
request-id: 413ee498-f337-4b0d-8ad5-50d900eb1f72
X-CalculatedBETarget: DM5PR2101MB0886.namprd21.prod.outlook.com
X-BackEndHttpStatus: 401
Set-Cookie: MapiRouting=#################################################; path=/mapi/; secure; HttpOnly
X-ServerApplication: Exchange/15.20.0485.000
X-RequestId: {3146D993-9082-4D57-99ED-9E7D5EA4FA56}:8
X-ClientInfo: {B0DD130A-CDBF-4CFA-8041-3D73B4318010}:59
X-RequestType: Bind
X-DiagInfo: DM5PR2101MB0886
X-BEServer: DM5PR2101MB0886
X-Powered-By: ASP.NET
X-FEServer: MA1PR0101CA0031
WWW-Authenticate: Basic Realm="",Basic Realm=""
Date: Wed, 31 Jan 2018 05:15:08 GMT
Content-Length: 0

在 Microsoft 365 管理中心管理基本身份验证

在 Microsoft 365 管理中心中 https://admin.microsoft.com,转到 “设置”“>组织设置”“>新式身份验证”。 在出现的 新式身份验证浮出控件 中,可以标识不再需要基本身份验证的协议。

这些设置在后台使用身份验证策略。 如果身份验证策略是在过去创建的,则修改这些选择中的任何一项都将自动创建第一个新身份验证策略。 此策略仅通过 PowerShell 可见。 对于可能已使用身份验证策略的高级客户,Microsoft 365 管理中心中的更改将修改其现有默认策略。 在进行任何更改之前,请浏览 Microsoft Entra 登录日志 ,了解客户端使用的协议。

在 Microsoft 365 管理中心中关闭基本身份验证不会关闭以下旧版服务:

  • AllowBasicAuthOutlookService
  • AllowBasicAuthReportingWebServices

只能在 Exchange Online PowerShell 中关闭这些设置。

  1. 运行以下命令,查找现有身份验证策略的名称:

    Get-AuthenticationPolicy
    
  2. 将 AuthenticationPolicyName> 替换为<上一步中的值,然后运行以下命令:

    Set-AuthenticationPolicy -Identity "<AuthenticationPolicyName>" -AllowBasicAuthReportingWebServices:$false -AllowBasicAuthOutlookService:$false
    
  3. 前面的命令会影响要创建的任何新邮箱,但不会影响现有邮箱。 若要将策略应用于现有邮箱,请在以下命令中使用 <AuthenticationPolicyName> 值:

    $mbx = Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize unlimited
    $mbx | foreach {Set-User -Identity $_.ExchangeObjectID.tostring() -AuthenticationPolicy <AuthenticationPolicyName>}
    

筛选同步到 Exchange Online 的本地 Active Directory 用户帐户

此方法使用一个特定属性作为将与 Exchange Online 同步的本地 Active Directory 组成员的筛选器。 此方法允许禁用特定组的旧协议,而不会影响整个组织。

在本示例中,我们将使用 Department 属性,因为它是一个通用属性,用于根据用户的部门和角色来标识用户。 若要查看所有 Active Directory 用户扩展属性,请转到 Active Directory:Get-ADUser 默认和扩展属性

步骤 1:查找 Active Directory 用户并设置 Active Directory 用户属性

获取 Active Directory 组的成员

这些步骤需要 Windows PowerShell 的 Active Directory 模块。 若要在电脑上安装此模块,需要下载并安装 远程服务器管理工具 (RSAT)

在 Active Directory PowerShell 中运行以下命令,以返回 Active Directory 中的所有组:

Get-ADGroup -Filter * | select -Property Name

获取组列表后,可以查询哪些用户属于这些组,并根据这些组的任何属性创建列表。 建议使用 objectGuid 属性,因为该值对每个用户都是唯一的。

Get-ADGroupMember -Identity "<GroupName>" | select -Property objectGuid

此示例返回名为 Developers 的组成员的 objectGuid 属性值。

Get-ADGroupMember -Identity "Developers" | select -Property objectGuid

设置可筛选用户属性

确定包含用户的 Active Directory 组后,需要设置将与 Exchange Online 同步的属性值,以筛选用户 (并最终) 禁用基本身份验证。

在 Active Directory PowerShell 中使用以下语法,为在上一步中标识的组的成员配置属性值。 第一个命令根据组成员 的 objectGuid 属性值标识组成员。 第二个命令将 Department 属性值分配给组成员。

$variable1 = Get-ADGroupMember -Identity "<GroupName>" | select -ExpandProperty "objectGUID"; Foreach ($user in $variable1) {Set-ADUser -Identity $user.ToString() -Add@{Department="<DepartmentName>"}}

本示例将属于名为“Developer”的组的用户的 Department 属性设置为值“Developer”。

$variable1 = Get-ADGroupMember -Identity "Developers" | select -ExpandProperty "objectGUID"; Foreach ($user in $variable1) {Set-ADUser -Identity $user.ToString() -Add@{Department="Developer"}}

在 Active Directory PowerShell 中使用以下语法验证属性是否已应用于用户帐户 (现在或过去) :

Get-ADUser -Filter "Department -eq '<DepartmentName>'" -Properties Department

此示例返回 Department 属性值为“Developer”的所有用户帐户。

Get-ADUser -Filter "Department -eq 'Developer'" -Properties Department

步骤 2:在 Exchange Online 中禁用旧身份验证

注意

只有具有有效 Exchange Online 许可证的用户,本地用户的属性值才会同步到 Exchange Online。 有关详细信息,请参阅 单独或批量添加用户

Exchange Online PowerShell 语法使用以下命令 (两个来标识用户帐户,使用另一个命令将策略应用于) 这些用户:

$<VariableName1> = Get-User -ResultSize unlimited -Filter <Filter>
$<VariableName2> = $<VariableName1>.MicrosoftOnlineServicesID
$<VariableName2> | foreach {Set-User -Identity $_ -AuthenticationPolicy "Block Basic Auth"}

此示例将名为“阻止基本身份验证”的策略分配给其 Department 属性包含值“Developer”的所有同步用户帐户。

$developerUsers = Get-User -ResultSize unlimited -Filter "(RecipientType -eq 'UserMailbox') -and (department -like '*developer*')"
$developers = $developerUsers.MicrosoftOnlineServicesID
$developers | foreach {Set-User -Identity $_ -AuthenticationPolicy "Block Basic Auth"}

如果在 Active Directory PowerShell 会话中连接到 Exchange Online PowerShell,则可以使用以下语法将策略应用于 Active Directory 组的所有成员。

此示例创建一个名为 Marketing Policy 的新身份验证策略,该策略对 Active Directory 组的成员禁用 Active Directory 组成员,该组名为 Marketing Department for ActiveSync、POP3、经身份验证的 SMTP 和 IMAP4 客户端。

注意

Active Directory PowerShell 中的已知限制阻止 Get-AdGroupMember cmdlet 返回超过 5000 个结果。 因此,以下示例仅适用于成员少于 5000 的 Active Directory 组。

New-AuthenticationPolicy -Name "Marketing Policy" -AllowBasicAuthActiveSync $false -AllowBasicAuthPop $false -AllowBasicAuthSmtp $false -AllowBasicAuthImap $false
$users = Get-ADGroupMember "Marketing Department"
foreach ($user in $users) {Set-User -Identity $user.SamAccountName -AuthenticationPolicy "Marketing Policy"}