Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
概述
本指南介绍在 Windows 平台上部署和执行令牌保护以保护登录会话令牌所需的步骤。
有关令牌保护和受支持的平台的概述,请参阅 Microsoft Entra 条件访问中的令牌保护。 使用此部署指南之前,请查看概述文档。
先决条件
使用此功能需要Microsoft Entra ID P1 许可证。 若要查找适合你需求的许可证,请参阅 Microsoft Entra ID 的常规可用功能比较。
支持的应用程序和资源
在强制实施策略之前,请确保用户正在运行受支持的最新版本客户端。 旧版本或不受支持的版本可能不兼容,可以阻止。
应用程序
令牌保护可应用于以下应用程序:
- Exchange PowerShell 模块
- Microsoft 365 Copilot
- Microsoft Edge(仅支持登录 Edge 个人资料)*
- 使用 EnableLoginByWAM 选项的 Microsoft Graph PowerShell
- Microsoft Loop
- Microsoft Teams
- Microsoft To Do
- OneNote
- OneDrive
- Outlook
- Power BI桌面
- Excel的PowerQuery扩展(仅限Current Channel用户使用)
- Visual Studio Code
- 使用“Windows 身份验证代理”登录选项时,Visual Studio
- Windows应用程序
- Word、Excel、PowerPoint
*令牌保护目前仅支持本机应用程序。 不支持基于浏览器的应用程序。
资源
Windows平台上的令牌保护可用于保护以下资源:
- Exchange 在线版
- SharePoint Online
- Microsoft Teams
- Azure 虚拟桌面
- Windows 365
已知的限制
- 不支持 Office 永久客户端。
- 访问Exchange和SharePoint时,以下应用程序不支持使用受保护的令牌流登录,并且用户将被阻止:
- 访问SharePoint的 PowerShell 模块
- 不在当前频道更新中的用户的 Excel 的 PowerQuery 扩展
- 用于访问Exchange或SharePoint的Visual Studio Code扩展
- 不支持以下Windows客户端设备:
- Surface Hub
- 基于Windows的Microsoft Teams会议室(MTR)系统
- 满足主租户中令牌保护设备注册要求的外部用户将得到支持。 但是,不符合这些要求的用户会看到一条不明原因的错误消息,且无法指出问题所在。
- 不支持使用以下方法向Microsoft Entra ID注册的设备:
- Microsoft Entra已加入Azure 虚拟桌面会话主机。
- Windows 设备使用 批量注册 进行部署。
- 由 Windows 365 部署并加入 Microsoft Entra 的 Cloud 电脑。
- Power Automate托管的计算机组已加入Microsoft Entra。
- 使用 自行部署模式 部署的 Windows Autopilot 设备。
- 在 Azure 中部署的 Windows 虚拟机使用启用了 Microsoft Entra ID 身份验证 的虚拟机扩展。
若要识别由于前面列出的注册类型不受支持而受影响的设备,请检查 tokenProtectionStatusDetails 登录日志中的属性。 由于设备注册类型不受支持而被阻止的令牌请求,可以通过 signInSessionStatusCode 值为 1003 进行标识。
为防止在加入过程中出现中断,您可以通过添加设备筛选条件,排除先前描述的部署类别中的设备,来修改令牌保护的条件访问策略。 例如,若要排除:
- Microsoft Entra 加入的云电脑可使用
systemLabels -eq "CloudPC" and trustType -eq "AzureAD"。 - Azure虚拟桌面已与Microsoft Entra加入,可以使用
systemLabels -eq "AzureVirtualDesktop" and trustType -eq "AzureAD"。 - 由 Power Automate 托管且加入 Microsoft Entra 的计算机组,可以使用
systemLabels -eq "MicrosoftPowerAutomate" and trustType -eq "AzureAD"。 - 使用Windows Autopilot以自助部署模式部署的设备,可以使用enrollmentProfileName属性。 例如,如果在 Intune 中为 Autopilot 自我部署模式设备创建了注册配置文件作为“Autopilot 自部署配置文件”,则可以使用
enrollmentProfileName -eq "Autopilot self-deployment profile"。 - Azure中已加入Microsoft Entra的Windows虚拟机,可以使用
profileType -eq "SecureVM" and trustType -eq "AzureAD"。
如何在Windows上启用令牌保护
对于用户来说,在已注册设备和兼容应用程序上使用兼容客户端平台时,用于强制实施令牌保护的条件访问策略的部署应该是不可见的。
若要最大程度地减少因应用或设备不兼容而导致用户中断的可能性,请遵循以下建议:
- 从一组试点用户开始,并随着时间推移而扩展。
- 在强制实施令牌保护之前,在 仅报告模式下 创建条件访问策略。
- 捕获交互式和非交互式身份验证日志。
- 分析这些日志的时间足够长,足以涵盖正常的应用程序使用。
- 将已知可靠用户添加到强制策略。
此过程有助于评估用户的客户端和应用兼容性,以便强制实施令牌保护。
创建条件访问策略
执行专用角色的用户(如 特权访问安全级别 中所述的用户)可能是此功能的目标。 可以通过试点运行小范围的子集来开始。
以下步骤可帮助你创建条件访问策略,以便在 Windows 设备上为 Exchange Online 和 SharePoint Online 提供令牌保护。
- 以至少 Conditional Access Administrator 的身份登录到 Microsoft Entra admin center。
- 浏览到 Entra ID>Conditional Access>策略。
- 选择“新策略”。
- 为策略指定名称。 为策略的名称创建有意义的标准。
- 在分配下,选择用户或工作负载标识。
- 在 “包括”下,选择要测试此策略的用户或组。
- 在“排除”下,选择“用户和组”,并选择组织的紧急访问或不受限帐户。
- 在“目标资源”>“资源(以前为云应用)”>“包括”>“选择资源”下
在 “选择”下,选择以下应用程序:
- Office 365 Exchange Online
- Office 365 SharePoint Online
- Microsoft Teams服务
- 如果在环境中部署了Windows App,请确保包括以下内容:
- Azure 虚拟桌面
- Windows 365
- Windows云登录
警告
应仅为这些应用程序配置条件访问策略。 选择 Office 365 应用程序组可能会导致意外失败。 此更改是一般规则的例外,即在条件访问策略中选择Office 365应用程序组。
选择 选择。
- 在“条件”下,执行以下操作:
- 在“设备平台”下:
- 将“配置”设置为“是”。
- 包括>选择设备平台>Windows。
- 选择完成。
- 在“客户端应用”下:
将“配置”设置为“是”。
警告
未配置 客户端应用 条件,或者选择 “浏览器 ”可能会导致使用 MSAL.js的应用程序(如 Teams Web)被阻止。
在“新式身份验证客户端”下,仅选择 “移动应用”和“桌面客户端”。 将其他项目保留为未选中状态。
选择完成。
- 在“设备平台”下:
- 在“访问控制”>“会话”下面,选择“要求对登录会话使用令牌保护”,然后选择“选择”。
- 确认设置,然后将“启用策略”设置为“只限报告”。
- 选择“ 创建 ”以启用策略。
确认设置后,使用策略影响模式或仅报告模式,将“启用策略”开关从 “仅报告” 切换到 “打开”。
小窍门
由于需要令牌保护的条件访问策略目前仅适用于Windows和 Apple 设备,因此当攻击者可能似乎来自其他平台时,必须保护环境免受潜在的策略绕过。
此外,还应配置以下策略:
捕获日志并进行分析
使用 策略影响、登录日志 和 日志分析 等功能,在条件访问强制实施前后监视令牌保护的实施情况。
登录日志
使用Microsoft Entra登录日志在仅报告模式或启用模式下验证令牌保护强制策略的结果。
- 以至少 Conditional Access Administrator 的身份登录到 Microsoft Entra admin center。
- 浏览到 Entra ID>监控与健康>登录日志。
- 选择特定请求以确定是否已应用策略。
- 根据状态转到“条件访问”或“仅报告”窗格,然后选择需要进行令牌保护的策略名称。
- 在 “会话控制” 下,检查是否满足策略要求。
- 若要查找有关请求绑定状态的更多详细信息,请选择窗格 “基本信息 ”,并查看字段 “令牌保护 - 登录会话”。 可能的值为:
- 绑定:请求使用绑定协议。 某些登录可能包括多个请求,并且所有请求都必须绑定以满足令牌保护策略。 即使单个请求似乎已绑定,如果其他请求未绑定,也不会确保符合策略。 若要查看登录的所有请求,可以筛选特定用户的所有请求或按关联 ID 查找。
- 未绑定:请求未使用绑定协议。 请求未绑定时可能的
statusCodes为:- 1002:由于设备状态缺乏Microsoft Entra ID,请求不受限制。
- 1003:请求未绑定,因为Microsoft Entra ID设备状态不符合令牌保护的条件访问策略要求。 此错误可能是由于设备注册类型不受支持,或者未使用全新登录凭据注册设备。
- 1005:由于其他未指定的原因,请求被解除绑定。
- 1006:请求未绑定,因为 OS 版本不受支持。
- 1008:请求未绑定,因为客户端未与平台代理(例如,Windows帐户管理器WAM)集成。
注释
登录日志输出:在 2023 年 6 月下旬,enforcedSessionControlssessionControlsNotSatisfied 中使用的字符串的值从 Binding 变为 SignInTokenProtection。 应更新登录日志数据的查询,以反映此更改。 示例涵盖了这两个值以包含历史数据。
Log Analytics
还可以使用 Log Analytics 查询由于令牌保护强制失败而阻止请求的登录日志(交互式和非交互式)。 这些查询只是示例,可能会发生更改。
示例查询:
过去 7 天内,以下 Log Analytics 查询在非交互式登录日志中搜索,并按 应用程序 突出显示了 被阻止 和 允许 的请求。
按应用程序发出的请求
//Per Apps query
// Select the log you want to query (SigninLogs or AADNonInteractiveUserSignInLogs )
//SigninLogs
AADNonInteractiveUserSignInLogs
// Adjust the time range below
| where TimeGenerated > ago(7d)
| project Id,ConditionalAccessPolicies, Status,UserPrincipalName, AppDisplayName, ResourceDisplayName
| where ConditionalAccessPolicies != "[]"
| where ResourceDisplayName == "Office 365 Exchange Online" or ResourceDisplayName =="Office 365 SharePoint Online" or ResourceDisplayName =="Azure Virtual Desktop" or ResourceDisplayName =="Windows 365" or ResourceDisplayName =="Windows Cloud Login"
| where ResourceDisplayName == "Office 365 Exchange Online" or ResourceDisplayName =="Office 365 SharePoint Online"
//Add userPrincipalName if you want to filter
// | where UserPrincipalName =="<user_principal_Name>"
| mv-expand todynamic(ConditionalAccessPolicies)
| where ConditionalAccessPolicies ["enforcedSessionControls"] contains '["Binding"]' or ConditionalAccessPolicies ["enforcedSessionControls"] contains '["SignInTokenProtection"]'
| where ConditionalAccessPolicies.result !="reportOnlyNotApplied" and ConditionalAccessPolicies.result !="notApplied"
| extend SessionNotSatisfyResult = ConditionalAccessPolicies["sessionControlsNotSatisfied"]
| extend Result = case (SessionNotSatisfyResult contains 'SignInTokenProtection' or SessionNotSatisfyResult contains 'SignInTokenProtection', 'Block','Allow')
| summarize by Id,UserPrincipalName, AppDisplayName, Result
| summarize Requests = count(), Users = dcount(UserPrincipalName), Block = countif(Result == "Block"), Allow = countif(Result == "Allow"), BlockedUsers = dcountif(UserPrincipalName, Result == "Block") by AppDisplayName
| extend PctAllowed = round(100.0 * Allow/(Allow+Block), 2)
| sort by Requests desc
此查询的结果应类似于以下屏幕截图:
以下查询示例查看了过去 7 天的非交互式登录日志,其中突出显示了用户所阻止和允许的请求。
用户请求
//Per users query
// Select the log you want to query (SigninLogs or AADNonInteractiveUserSignInLogs )
//SigninLogs
AADNonInteractiveUserSignInLogs
// Adjust the time range below
| where TimeGenerated > ago(7d)
| project Id,ConditionalAccessPolicies, UserPrincipalName, AppDisplayName, ResourceDisplayName
| where ConditionalAccessPolicies != "[]"
| where ResourceDisplayName == "Office 365 Exchange Online" or ResourceDisplayName =="Office 365 SharePoint Online" or ResourceDisplayName =="Azure Virtual Desktop" or ResourceDisplayName =="Windows 365" or ResourceDisplayName =="Windows Cloud Login"
| where ResourceDisplayName == "Office 365 Exchange Online" or ResourceDisplayName =="Office 365 SharePoint Online"
//Add userPrincipalName if you want to filter
// | where UserPrincipalName =="<user_principal_Name>"
| mv-expand todynamic(ConditionalAccessPolicies)
| where ConditionalAccessPolicies ["enforcedSessionControls"] contains '["Binding"]' or ConditionalAccessPolicies ["enforcedSessionControls"] contains '["SignInTokenProtection"]'
| where ConditionalAccessPolicies.result !="reportOnlyNotApplied" and ConditionalAccessPolicies.result !="notApplied"
| extend SessionNotSatisfyResult = ConditionalAccessPolicies.sessionControlsNotSatisfied
| extend Result = case (SessionNotSatisfyResult contains 'SignInTokenProtection' or SessionNotSatisfyResult contains 'SignInTokenProtection', 'Block','Allow')
| summarize by Id, UserPrincipalName, AppDisplayName, ResourceDisplayName,Result
| summarize Requests = count(),Block = countif(Result == "Block"), Allow = countif(Result == "Allow") by UserPrincipalName, AppDisplayName,ResourceDisplayName
| extend PctAllowed = round(100.0 * Allow/(Allow+Block), 2)
| sort by UserPrincipalName asc
以下查询示例查看过去七天的非交互式登录日志,其中突出显示了使用设备的用户,其中Microsoft Entra ID设备状态不满足令牌保护 CA 策略要求。
设备不满足策略要求
AADNonInteractiveUserSignInLogs
// Adjust the time range below
| where TimeGenerated > ago(7d)
| where TokenProtectionStatusDetails!= ""
| extend parsedBindingDetails = parse_json(TokenProtectionStatusDetails)
| extend bindingStatus = tostring(parsedBindingDetails["signInSessionStatus"])
| extend bindingStatusCode = tostring(parsedBindingDetails["signInSessionStatusCode"])
| where bindingStatusCode == 1003
| summarize count() by UserPrincipalName
最终用户体验
启用令牌保护要求时,注册或注册其支持设备的用户在令牌保护支持的应用程序中的登录体验没有任何差异。
尚未注册或注册其设备的用户,如果已启用令牌保护策略,身份验证后会显示以下屏幕截图。
启用令牌保护策略时未使用受支持的应用程序的用户将在身份验证后看到以下屏幕截图。