使用条件访问控制管理风险

关键概念 - AD FS 中的条件访问控制

AD FS 的整体功能是颁发包含一组声明的访问令牌。 AD FS 接受和发布哪些声明是由声明规则决定的。

AD FS 中的访问控制是通过颁发授权声明规则实现的,这些规则用于颁发许可证或拒绝声明,这些声明将确定是否允许用户或用户组访问受 AD FS 保护的资源。 只能在信赖方信任上设置授权规则。

规则选项 规则逻辑
允许所有用户 如果传入声明类型等于任何声明类型和值等于任何值,则发出值等于 Permit 的声明
允许具有此传入声明的用户访问 如果传入声明类型等于指定的声明类型和值等于指定的声明值,则发出值等于 Permit 的声明
拒绝具有此传入声明的用户访问 如果传入声明类型等于指定的声明类型和值等于指定的声明值,则发出值等于 Deny 的声明

有关这些规则选项和逻辑的详细信息,请参阅 “何时使用授权声明规则”。

在 Windows Server 2012 R2 中的 AD FS 中,通过多种因素(包括用户、设备、位置和身份验证数据)增强了访问控制。 这是通过提高授权声明规则所用的声明类型的多样性来实现的。 换而言之,在 Windows Server 2012 R2 的 AD FS 中,可以根据用户标识或组成员身份、网络位置、设备(是否加入工作区,有关详细信息,请参阅从任何设备加入工作区,以便实现 SSO 和跨公司应用程序的无缝第二重身份验证),以及身份验证状态(是否执行了多重身份验证 (MFA))来强制执行条件访问控制。

Windows Server 2012 R2 中 AD FS 中的条件访问控制具有以下优势:

  • 灵活且具有表现力的按应用程序授权策略,可以基于用户、设备、网络位置和身份验证状态允许或拒绝访问

  • 为信赖方应用程序创建颁发授权规则

  • 针对常见的条件访问控制方案提供丰富的 UI 体验

  • 针对高级条件访问控制方案提供丰富的声明语言和 Windows PowerShell 支持

  • 自定义的(按照信赖方应用)“拒绝访问”消息。 有关详细信息,请参阅 自定义 AD FS 登录页。 由于能够自定义这些消息,你可以解释为何用户被拒绝访问,并尽可能协助进行自助式补救,例如,提示用户将其设备加入工作区。 有关详细信息,请参阅 通过任何设备连接到工作区,实现 SSO 和无缝的二次身份验证,覆盖公司所有应用程序

下表包括 Windows Server 2012 R2 中 AD FS 中可用于实现条件访问控制的所有声明类型。

声明类型 说明
电子邮件地址 用户的电子邮件地址。
用户的给定名称。
名字 用户的唯一名称,
UPN 用户的用户主体名称 (UPN)。
公用名 用户的公用名。
AD FS 1.x 电子邮件地址 与 AD FS 1.1 或 AD FS 1.0 互作时用户的电子邮件地址。
分组 用户所属的组。
AD FS 1.x UPN 与 AD FS 1.1 或 AD FS 1.0 互作时用户的 UPN。
角色 用户具有的角色。
用户的姓氏。
PPID 用户的专用标识符。
名称 ID 用户的 SAML 名称标识符。
身份验证时间戳 用于显示用户进行身份验证的时间和日期。
身份验证方法 用于对用户进行身份验证的方法。
“仅拒绝”组 SID 用户的“仅拒绝”组 SID。
“仅拒绝”主 SID 用户的“仅拒绝”主 SID。
“仅拒绝”主组 SID 用户的“仅拒绝”主组 SID。
组 SID 用户的组 SID。
主组 SID 用户的主组 SID。
主 SID 用户的主要 SID。
Windows 帐户名称 用户的域帐户名,格式为“域\用户”。
为注册用户 用户注册使用此设备。
设备标识符 设备的标识符。
设备注册标识符 Device Registration 的标识符。
Device Registration 显示名称 Device Registration 的显示名称。
设备 OS 类型 设备的操作系统类型。
设备 OS 版本 设备的操作系统版本。
为托管设备 设备由管理服务管理。
转发的客户端 IP 用户的 IP 地址。
客户端应用程序 客户端应用程序的类型。
客户端用户代理 客户端用于访问应用程序的设备类型。
客户端 IP 客户端的 IP 地址。
终结点路径 可用于确定主动客户端与被动客户端的绝对终结点路径。
代理 传递请求的联合服务器代理的 DNS 名称。
应用程序标识符 信赖方的标识符。
应用程序策略 证书的应用程序策略。
权限密钥标识符 为已颁发证书签名的证书的授权密钥标识符扩展。
基本约束 证书的基本约束之一。
增强型密钥用法 介绍证书的增强型密钥用法之一。
发行人 颁发 X.509 证书的证书颁发机构的名称。
颁发者名称 证书颁发者的专有名称。
密钥用法 证书的密钥用法之一。
不晚于 以本地时间表示的证书有效截止日期。
不早于 证书生效的本地时间日期。
证书策略 颁发证书的策略。
公钥 证书的公钥。
证书原始数据 证书的原始数据。
使用者可选名称 证书的替代名称之一。
序列号 证书的序列号。
签名算法 用于创建证书签名的算法。
使用者 证书中的主题。
使用者密钥标识符 证书的主题密钥标识符。
主题名称 证书中的使用者可分辨名称。
V2 模板名称 用于签发或续订证书的版本 2 证书模板的名称。 这是一个特定于Microsoft的值。
V1 模板名称 颁发或续订证书时使用的版本 1 证书模板的名称。 这是一个特定于Microsoft的值。
指纹 证书的指纹。
X 509 版本 证书的 X.509 格式版本。
企业网络内部 用于指示请求是否源自企业网络内部。
密码过期时间 用于显示密码过期的时间。
密码过期日期 用于显示密码到期天数。
更新密码链接 用于显示更新密码服务的 Web 地址。
身份验证方法参考 用于指示用户身份验证所用的所有身份验证方法。

使用条件访问控制管理风险

使用可用设置时,可以通过实施条件访问控制来管理风险的方法很多。

常见方案

例如,假设基于特定应用程序的用户组成员身份数据(信赖方信任)实现条件访问控制的简单方案。 换句话说,可以在联合服务器上设置颁发授权规则,以允许属于 AD 域中特定组的用户访问受 AD FS 保护的特定应用程序。 演练指南:使用条件访问控制管理风险(使用 UI 和 Windows PowerShell)中介绍了实现此方案的详细分步说明。 若要完成本演练中的步骤,必须设置实验室环境,并按照在 Windows Server 2012 R2 中为 AD FS 设置实验室环境的步骤进行作。

高级场景

在 Windows Server 2012 R2 中的 AD FS 中实现条件访问控制的其他示例包括:

  • 仅当此用户的标识通过 MFA 验证时,才允许访问受 AD FS 保护的应用程序

    可以使用以下代码:

    @RuleTemplate = "Authorization"
    @RuleName = "PermitAccessWithMFA"
    c:[Type == "https://schemas.microsoft.com/claims/authnmethodsreferences", Value =~ "^(?i)https://schemas\.microsoft\.com/claims/multipleauthn$"] => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "PermitUsersWithClaim");
    
    
  • 仅当访问请求来自注册在用户名下的加入工作网络的设备时,才允许访问受 AD FS 保护的应用程序。

    可以使用以下代码:

    @RuleTemplate = "Authorization"
    @RuleName = "PermitAccessFromRegisteredWorkplaceJoinedDevice"
    c:[Type == "https://schemas.microsoft.com/2012/01/devicecontext/claims/isregistereduser", Value =~ "^(?i)true$"] => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "PermitUsersWithClaim");
    
    
  • 仅当访问请求来自已注册到用户且已加入工作区的设备,并且该用户的标识已使用 MFA 进行验证时,才允许访问受 AD FS 保护的应用程序

    可以使用以下代码

    @RuleTemplate = "Authorization"
    @RuleName = "RequireMFAOnRegisteredWorkplaceJoinedDevice"
    c1:[Type == "https://schemas.microsoft.com/claims/authnmethodsreferences", Value =~ "^(?i)http://schemas\.microsoft\.com/claims/multipleauthn$"] &&
    c2:[Type == "https://schemas.microsoft.com/2012/01/devicecontext/claims/isregistereduser", Value =~ "^(?i)true$"] => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "PermitUsersWithClaim");
    
    
  • 仅当访问请求来自已通过 MFA 验证标识的用户时,才允许 Extranet 访问受 AD FS 保护的应用程序。

    可以使用以下代码:

    @RuleTemplate = "Authorization"
    @RuleName = "RequireMFAForExtranetAccess"
    c1:[Type == "https://schemas.microsoft.com/claims/authnmethodsreferences", Value =~ "^(?i)http://schemas\.microsoft\.com/claims/multipleauthn$"] &&
    c2:[Type == "https://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", Value =~ "^(?i)false$"] => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "PermitUsersWithClaim");
    
    

另请参阅

演练指南:使用条件访问控制管理风险:在 Windows Server 2012 R2 中为 AD FS 设置实验室环境