身份验证
CAS认证过程是由几个相关的组件:
PrincipalNameTransformer
转换输入登录的用户id字符串形成了初步的主体名称 由一个特定类型的身份验证处理器验证。
AuthenticationManager
入口点进入认证子系统。 它接受一个或多个身份验证凭证和代表 配置 AuthenticationHandler
组件。 它收集每个尝试的结果,并确定有效 安全策略。
AuthenticationHandler
验证一个证书和报告的三种可能的结果:成功,失败,而不是企图。
PrincipalResolver
身份验证凭证中的信息转换成一般安全主要包含额外的 元数据属性(即用户详细信息,如联系组成员,电子邮件,显示名称)。
AuthenticationMetaDataPopulator
战略成功的身份验证组件设置任意元数据对一个事件,这些都是常用的 设置特定于协议的数据。
除非另外注明,所有身份验证组件的配置是在处理 deployerConfigContext.xml
。
身份验证管理器
CAS还附带一个灵活的认证管理器, PolicyBasedAuthenticationManager
,这应该 满足大多数需求。 它根据以下合同执行身份验证。
对于每个给定的凭证做以下:
- 遍历所有身份验证配置处理程序。
- 试图验证凭证如果处理程序支持它。
- 在试图解决一个主要成功。
- 检查是否一个解析器配置为处理程序,经过身份验证的凭据。
- 如果找到一个合适的解析器,试图解决校长。
- 如果没有找到一个合适的解析器,使用主要由身份验证处理程序解决。
- 检查是否安全策略(如任何、所有)满意。
- 如果安全策略就会立即返回。
- 如果不满足安全策略。
- 毕竟凭证已经再次尝试检查安全策略,扔
AuthenticationException
如果不满意。
有一个隐含的安全政策,要求至少有一个处理器成功进行身份验证凭据, 但行为可以进一步控制设置 # setAuthenticationPolicy(AuthenticationPolicy)
下列政策之一。
AnyAuthenticationPolicy
满意如果任何处理程序成功。 支持一个 tryAll
国旗,以避免短路在步骤4.1以上,每一个尝试 处理程序之前即使成功了。 这一政策是默认和提供向后兼容的行为 AuthenticationManagerImpl CAS
组件3. x。
AllAuthenticationPolicy
满足当且仅当所有凭证成功验证。 支持多种凭证 新在CAS和这个处理程序将只在多因素身份验证的情况下是可以接受的。
RequiredHandlerAuthenticationPolicy
满意的如果一个只有一个指定处理程序成功进行身份验证凭据。 支持一个 tryAll
旗帜 避免短路步骤4.1以上,每一个处理程序,即使之前成功了。 这个政策可以 用于支持多因素身份验证的情况下,例如,用户名/密码身份验证在哪里 但需要一个额外的OTP是可选的。
身份验证处理程序
CAS附带支持身份验证对许多常见类型的身份验证系统。 下面的列表提供了一个完整的列表支持身份验证技术;跳的部分(s) 的兴趣。
- 数据库
- JAAS
- LDAP
- OAuth 1.0/2.0,OpenID
- 半径
- SPNEGO (窗口)
- 受信任的 (REMOTE_USER)
- x (客户端SSL证书)
- 远程地址
- YubiKey
- Apache Shiro
- pac4j
有一些额外的小部署和特殊情况处理程序:
默认凭证
在CAS测试默认身份验证方案, 使用 案例 和 梅隆 分别作为用户名和密码。
密码编码
密码编码器期间负责验证事件转换和编码 的证书密码身份验证源是可以接受的一种形式。
默认的编码器
<alias name="defaultPasswordEncoder" alias="passwordEncoder" />
以下设置是适用的:
# cas.authn.password.encoding.char=UTF-8
# cas.authn.password.encoding.alg=SHA-256
纯文本
<alias name="plainTextPasswordEncoder" alias="passwordEncoder" />
参数提取器
提取器负责检查http请求收到等参数描述身份验证请求的请求 服务
等。萃取器存在的支持身份验证协议和每创建适当的实例 WebApplicationService
包含提取的结果。
主要解决
请 见本指南 更多详情主要决议。
主要转换
身份验证处理程序通常处理username-password凭证 可以配置为将用户id之前执行身份验证序列。 可用以下组件:
NoOpPrincipalNameTransformer
默认的变压器,实际上没有转换的用户id。
<alias name="noOpPrincipalNameTransformer" alias="principalNameTransformer" />
PrefixSuffixPrincipalNameTransformer
转换的用户id添加后缀或后缀。
<alias name="prefixSuffixPrincipalNameTransformer" alias="principalNameTransformer" />
以下设置是适用的:
# cas.principal.transform.prefix=
# cas.principal.transform.suffix=
ConvertCasePrincipalNameTransformer
一个变压器,将uid小写或大写形式。 结果也削减了。 变压器也能够接受和处理的结果 前一个变压器可能修改的uid,这样两个可以链接。
<alias name="convertCasePrincipalNameTransformer" alias="principalNameTransformer" />
以下设置是适用的:
# cas.principal.transform.upperCase=false
身份验证元数据
AuthenticationMetaDataPopulator
组件提供一个可插入策略注入任意元数据 身份验证子系统消耗其他子系统或外部组件。 一些著名的元数据的使用 的思想:
- 支持长期的身份验证功能
- SAML协议支持
- OAuth与OpenID协议支持。
默认的身份验证元数据的思想应该是足够的对于大多数部署。 组件的位置 需要支持可选的CAS特性,他们会明确地识别和配置将提供。
长期的验证
CAS支持长期票据授予票,也称为一个特性 “记住我” SSO的长度延伸会话之外的典型配置。 请 见本指南 为更多的细节。
代理身份验证
请 见本指南 为更多的细节。
多因素身份验证(MFA)
请 见本指南 为更多的细节。
登录节流
CAS提供了设备支持密码限制失败的登录尝试猜测和滥用相关的场景。 请 见本指南 更多细节在登录节流。
SSO会话Cookie
票据授予饼干是一个HTTP cookie组上,CAS建立单点登录会话。 这对客户机cookie维护登录状态,虽然它是有效的,客户端可以现在CAS的主要凭证。 请 见本指南 额外的细节。
参考资料:https://apereo.github.io/cas/4.2.x/installation/Configuring-Authentication-Components.html