`
xyz20003
  • 浏览: 292847 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

(翻译)Spring Security-2.0.x参考文档“摘要式认证”

阅读更多
摘要式认证
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版本的中文指南,它不仅覆盖了核心概念、配置方法以及实际应用案例,还深入探讨了安全框架的...

    Spring Security参考文档2.0.x.chm

    Spring Security参考文档2.0.x.chm,

    Spring Security 2.0.x中文参考文档.pdf

    NULL 博文链接:https://ReturnOfKing.iteye.com/blog/255089

    spring-framework-5.0.8.RELEASE官方完整包加官方文档

    6. **Spring Security**:5.0版本的Spring Security提供了新的安全特性和改进,如支持OAuth2.0、JWT(JSON Web Tokens)等,强化了认证和授权流程。 7. **Reactor升级**:Spring 5使用了Reactor 3.x作为其响应式...

    Spring Security 2.0.x 参考文档

    博文链接:https://antgreen.iteye.com/blog/241206

    spring-security-reference.pdf

    Spring Security是一个功能强大且高度可定制的认证和访问控制框架,它是针对Java应用程序的安全性需求而设计的。...开发者可以通过阅读官方参考文档来掌握如何在项目中应用和配置Spring Security,实现所需的安全功能。

    Spring Security最新文档(英文)

    Spring Security是为了解决应用安全问题而设计的一套框架,它主要针对基于Spring的应用提供声明式的安全保护。最新文档5.1.1版本详细说明了如何使用Spring Security来保护基于Spring的应用,其中涵盖了各种安全策略...

    Spring-Security2.0 和 3.0中文文档

    Spring Security 2.0 提供了基础的认证和授权功能,而3.0进一步强化了模块化设计。这使得开发者可以根据项目需求选择合适的组件,如Web安全模块、方法安全模块和密码存储模块等。 2. **表达式式访问控制...

    Spring Security 2.0 中文参考文档

    **Spring Security 2.0 知识点详解** Spring Security 是一个强大且高度可定制的权限访问控制框架,主要用于Java应用程序的安全性管理。在2.0版本中,它提供了全面的解决方案来保护Web应用程序免受各种安全威胁。...

    Spring Security 参考手册 中文版

    Spring Security 2.0.x 参考手册 中文版

    spring-framework-4.3.6.RELEASE-文档&约束

    在Spring框架的上下文中,它可能包含关于如何访问和使用文档的指示,以及关于4.3.6.RELEASE版本的更新和改进的摘要。 3. **notice.txt**:这个文件列出了Spring框架中使用的第三方组件及其相应的版权信息。它提醒...

    activiti6-springboot2.0-demo.zip

    本项目"activiti6-springboot2.0-demo.zip"就是一个实例,展示了如何将 Activiti 6 集成到 SpringBoot 2.0 的环境中,并实现流程高亮显示、在线Web设计器集成以及相关的Java代码和参考文档。 一、Activiti 6 知识点...

    spring-boot-2.0.0.RELEASE.zip

    - **安全控制**:通过Spring Security,可以方便地实现用户认证和授权,保护应用的安全。 - **微服务架构**:结合Spring Cloud,可以构建完整的微服务生态系统,包括服务注册与发现、配置中心、熔断机制等。 4. ...

    Spring-Secutity-5.0.3

    Spring Security是Java平台上一个强大的安全框架,主要...Spring Security是一个功能丰富且不断进化的安全框架,每个版本的更新都会增加新的特性和改进现有功能,因此建议开发者参考官方文档进行深入学习和实际应用。

    spring2.0 security

    《Spring Security 2.0深度解析》 Spring Security是一款强大的安全框架,用于处理Java应用程序的安全需求,特别是...在实际开发中,可以参考博客链接中的内容,结合官方文档,逐步探索和掌握Spring Security的精髓。

    apache-cxf-3.1.6.zip官网完整包

    通过阅读官方文档、API参考和示例,您可以更深入地学习如何使用Apache CXF创建和部署Web服务,以及如何利用其与Spring的集成来构建健壮的服务端应用。同时,持续关注Apache CXF的更新,以便及时获取最新的特性和改进...

    spring security 优秀中文资料+例子(包含多个中文资料,很全)

    "Spring+Security+2.0.x+参考文档.pdf" 和 "spring+security+参考文档.pdf" 是官方或非官方的Spring Security参考文档,它们包含了详尽的技术细节和使用示例。这些文档可以帮助你了解Spring Security的所有功能,...

    security-enterprise-FrontBackSplit_2.3.0.zip

    4. **文档**:提供详细的安装指南、API参考、使用示例等,帮助开发者理解和使用这个框架。 5. **测试用例**:用于验证框架功能的正确性,通常包括单元测试和集成测试。 6. **构建脚本**:如Maven的pom.xml或npm的...

Global site tag (gtag.js) - Google Analytics