关键概念 - 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");