摘要式认证
13.1. 概述
Spring Security提供了一个 DigestProcessingFilter,它可以处理HTTP头部中的摘要认证证书。 摘要认证在尝试着解决许多基本认证的缺陷,特别是保证不会通过纯文本发送证书。 许多用户支持摘要式认证,包括FireFox和IE。 HTTP摘要式认证的执行标准定义在RFC 2617,它是对RFC 2069这个早期摘要式认证标准的更新。 Spring Security DigestProcessingFilter会保证"auth"的安全质量(qop),它订明在RFC 2617中,并与RFC 2069提供了兼容。 如果你需要使用没有加密的HTTP(比如没有TLS/HTTP),还希望认证达到最大的安全性的时候,摘要式认证便具有很高吸引力。 事实上,摘要式认证是WebDAV协议的强制性要求,写在RFC 2518的17.1章,所以我们应该期望看到更多的代替基本认证。
摘要式认证,是表单认证,基本认证和摘要式认证中最安全的选择,不过更安全也意味着更复杂的用户代理实现。 摘要式认证的中心是一个“nonce”。 这是由服务器生成的一个值。 Spring Security的nonce采用下面的格式:
base64(expirationTime + ":" + md5Hex(expirationTime + ":" + key))
expirationTime: The date and time when the nonce expires, expressed in milliseconds
key: A private key to prevent modification of the nonce token
这个DigestProcessingFilterEntryPoint有一个属性,通过指定一个key来生成nonce标志,通过nonceValiditySeconds属性来决定过期时间(默认300,等于5分钟)。 只要nonce是有效的,摘要就会通过串联字符串计算出来,包括用户名,密码,nonce,请求的URI,一个客户端生成nonce(仅仅是一个随机值,用户代理每个请求生成一个),realm名称等等,然后执行一次MD5散列。 服务器和用户代理都要执行这个摘要计算,如果他们包含的值不同(比如密码),就会生成不同的散列码。 在Spring Security的实现中,如果服务器生成的nonce已经过期(但是摘要还是有效),DigestProcessingFilterEntryPoint会发送一个"stale=true"头信息。 这告诉用户代理,这里不再需要打扰用户(像是密码和用户其他都是正确的),只是简单尝试使用一个新nonce。
DigestProcessingFilterEntryPoint的 nonceValiditySeconds参数,会作为一个适当的值依附在你的程序上。 对安全要求很高的用户应该注意,一个被拦截的认证头部可以用来假冒主体,直到nonce达到expirationTime。 在选择合适的配置的时候,这是一个必须考虑到的关键性条件,但是在对安全性要求很高的程序里,第一次请求都会首先运行在TLS/HTTPS之上。
因为摘要式认证需要更复杂的实现,这里常常有用户代理的问题。 比如,IE不能在同一个会话的请求进程里阻止"透明"标志。 因此Spring Security把所有状态信息都概括到"nonce"标记里。 在我们的测试中,Spring Security在FireFox和IE里都可以工作,正确的处理nonce超时等等。
13.2. 配置
现在我们重新看一下理论,让我们看看如何使用它。 为了实现HTTP摘要认证,必须在过滤器链里定义DigestProcessingFilter。 application context还需要定义DigestProcessingFilter和它需要的合作伙伴:
<bean id="digestProcessingFilter"
class="org.springframework.security.ui.digestauth.DigestProcessingFilter">
<property name="userDetailsService" ref="jdbcDaoImpl"/>
<property name="authenticationEntryPoint" ref="digestProcessingFilterEntryPoint"/>
<property name="userCache" ref="userCache"/>
</bean>
<bean id="digestProcessingFilterEntryPoint"
class="org.springframework.security.ui.digestauth.DigestProcessingFilterEntryPoint">
<property name="realmName" value="Contacts Realm via Digest Authentication"/>
<property name="key" value="acegi"/>
<property name="nonceValiditySeconds" value="10"/>
</bean>
需要配置一个UserDetailsService,因为 DigestProcessingFilter必须直接访问用户的纯文本密码。 如果你在DAO中使用编码过的密码,摘要式认证就没法工作。 DAO合作者,与UserCache一起,通常使用DaoAuthenticationProvider直接共享。 这个authenticationEntryPoint属性必须是DigestProcessingFilterEntryPoint,这样DigestProcessingFilter可以在进行摘要计算时获得正确的realmName和key。
像BasicAuthenticationFilter一样,如果认证成功,会把Authentication请求标记放到SecurityContextHolder中。 如果认证事件成功,或者认证不需要执行,因为HTTP头部没有包含摘要认证请求,过滤器链会正常继续。 过滤器链中断的唯一情况是,如果认证失败,就会像上面讨论的那样调用AuthenticationEntryPoint。
摘要式认证的RFC要求附加功能范围,来更好的提升安全性。 比如,nonce可以在每次请求的时候变换。 但是,Spring Security的设计思路是最小复杂性的实现(毫无疑问,用户代理会出现不兼容),也避免保存服务器端的状态。 如果你想研究这些功能的更多细节,我们推荐你看一下RFC 2617。 像我们知道的那样,Spring Security实现类遵守了RFC的最低标准。
分享到:
相关推荐
### Spring Security 2.0.x完全中文参考文档 #### 序言 本文档旨在为用户提供一份详尽且全面的Spring Security 2.0.x版本的中文指南,它不仅覆盖了核心概念、配置方法以及实际应用案例,还深入探讨了安全框架的...
Spring Security参考文档2.0.x.chm,
NULL 博文链接:https://ReturnOfKing.iteye.com/blog/255089
6. **Spring Security**:5.0版本的Spring Security提供了新的安全特性和改进,如支持OAuth2.0、JWT(JSON Web Tokens)等,强化了认证和授权流程。 7. **Reactor升级**:Spring 5使用了Reactor 3.x作为其响应式...
博文链接:https://antgreen.iteye.com/blog/241206
Spring Security是一个功能强大且高度可定制的认证和访问控制框架,它是针对Java应用程序的安全性需求而设计的。...开发者可以通过阅读官方参考文档来掌握如何在项目中应用和配置Spring Security,实现所需的安全功能。
Spring Security是为了解决应用安全问题而设计的一套框架,它主要针对基于Spring的应用提供声明式的安全保护。最新文档5.1.1版本详细说明了如何使用Spring Security来保护基于Spring的应用,其中涵盖了各种安全策略...
Spring Security 2.0 提供了基础的认证和授权功能,而3.0进一步强化了模块化设计。这使得开发者可以根据项目需求选择合适的组件,如Web安全模块、方法安全模块和密码存储模块等。 2. **表达式式访问控制...
**Spring Security 2.0 知识点详解** Spring Security 是一个强大且高度可定制的权限访问控制框架,主要用于Java应用程序的安全性管理。在2.0版本中,它提供了全面的解决方案来保护Web应用程序免受各种安全威胁。...
Spring Security 2.0.x 参考手册 中文版
在Spring框架的上下文中,它可能包含关于如何访问和使用文档的指示,以及关于4.3.6.RELEASE版本的更新和改进的摘要。 3. **notice.txt**:这个文件列出了Spring框架中使用的第三方组件及其相应的版权信息。它提醒...
本项目"activiti6-springboot2.0-demo.zip"就是一个实例,展示了如何将 Activiti 6 集成到 SpringBoot 2.0 的环境中,并实现流程高亮显示、在线Web设计器集成以及相关的Java代码和参考文档。 一、Activiti 6 知识点...
- **安全控制**:通过Spring Security,可以方便地实现用户认证和授权,保护应用的安全。 - **微服务架构**:结合Spring Cloud,可以构建完整的微服务生态系统,包括服务注册与发现、配置中心、熔断机制等。 4. ...
Spring Security是Java平台上一个强大的安全框架,主要...Spring Security是一个功能丰富且不断进化的安全框架,每个版本的更新都会增加新的特性和改进现有功能,因此建议开发者参考官方文档进行深入学习和实际应用。
《Spring Security 2.0深度解析》 Spring Security是一款强大的安全框架,用于处理Java应用程序的安全需求,特别是...在实际开发中,可以参考博客链接中的内容,结合官方文档,逐步探索和掌握Spring Security的精髓。
通过阅读官方文档、API参考和示例,您可以更深入地学习如何使用Apache CXF创建和部署Web服务,以及如何利用其与Spring的集成来构建健壮的服务端应用。同时,持续关注Apache CXF的更新,以便及时获取最新的特性和改进...
"Spring+Security+2.0.x+参考文档.pdf" 和 "spring+security+参考文档.pdf" 是官方或非官方的Spring Security参考文档,它们包含了详尽的技术细节和使用示例。这些文档可以帮助你了解Spring Security的所有功能,...
4. **文档**:提供详细的安装指南、API参考、使用示例等,帮助开发者理解和使用这个框架。 5. **测试用例**:用于验证框架功能的正确性,通常包括单元测试和集成测试。 6. **构建脚本**:如Maven的pom.xml或npm的...