spring security restful interface - 改进json请求,以免传递明文密码

时间:2014-08-06 04:44:37

标签: spring spring-mvc spring-security

我有一个使用spring security的spring mvc 3.0 webapp。我已经在spring security登录服务中实现了一个基本的json服务,但就我而言,它还不够确定。

在我的json请求中,我以纯文本形式传递以下类型。

{"j_username":"myPlainTextUsername", "j_password":"myPlainTextPassword" , "j_store":"1"}

我的所有密码都使用直接md5加密存储在数据库中。我的应用程序使用以下spring配置。

<beans:bean id="userDetailsDao" 
    class="com.mycompany.reporting.dao.UserDetailsDaoImpl"/>

<beans:bean id="encoder" 
    class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"/>

<beans:bean id="authenticationProvider" 
    class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"
    p:userDetailsService-ref="userDetailsDao"
    p:passwordEncoder-ref="encoder" />

<authentication-manager alias="authenticationManager" erase-credentials="false">
    <authentication-provider ref="authenticationProvider"></authentication-provider>
</authentication-manager>

我没有把明文密码放在json请求中,而是想通过包含一个md5哈希值的字符串来尝试改进它...

  
      
  1. 用户名(盐)
  2.   
  3. 网址(盐)
  4.   
  5. 密码
  6.   

然后我希望能够解密,将盐与密码分开,然后进行身份验证。我知道spring security允​​许使用salt,但我认为只有在密码与db一起存储时才有用。

有人可以帮我提一下如何做到这一点吗?春天有什么东西可以帮助我做我想做的事吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

AFAIK,md5并非不可逆转。因此,如果您获得密码的md5哈希值,则只能将其与存储在数据库中的md5哈希值进行比较。如果两个哈希都使用相同的盐,那么比较只会有意义。

如果是一个选项,对登录页面使用https并继续以明文形式发送密码会更简单 - 但是通过https加密频道。

如果没有,您将必须将密码以纯文本形式存储(或使用可逆编码,这看起来更好但不会真正提高安全性),以便能够在两侧进行相同的散列并比较散列值。