我有一个使用Spring Security和Grails的Web应用程序。我使用的数据库是MySql。我想更改框架以使用.Net和C#但使用相同的数据库。 spring security创建的密码是加密的。我想要一种使用相同数据库验证用户名和密码的方法。
有办法做到这一点吗?
编辑:
我已经阅读了几篇关于SHA解密的帖子。有没有其他方法来处理它?</ p>
答案 0 :(得分:1)
你无法做到这一点 - 这就是在数据库中保留密码的重点。但是,您始终可以自己计算哈希值,并将其与存储在数据库中的值进行比较。
答案 1 :(得分:1)
基本上你需要研究一下你使用弹簧安全性的加密形式我还没有深入研究它,但这可能会有所帮助
SystemWideSaltSource和Custom SaltSource
Spring Security提供了一个简单的SaltSource实现,`{apidocs} org / springframework / security / authentication / dao / SystemWideSaltSource.html [SystemWideSaltSource],它为每个用户使用相同的salt。它不如为每个用户使用不同的值,但仍然比没有盐更好。
使用SystemWideSaltSource的salt源bean的示例覆盖如下所示:
清单1.在application.groovy
中将SystemWideSaltSource配置为saltSource beanimport org.springframework.security.authentication.dao.SystemWideSaltSource
beans = {
saltSource(SystemWideSaltSource) {
systemWideSalt = 'the_salt_value'
}
}
要完全控制该过程,您可以通过在grails-app / conf / spring / resources.groovy中定义一个名为saltSource的bean来实现SaltSource接口并将插件的实现替换为您自己的实现:
清单2.在application.groovy
中配置saltSource bean的自定义实现import com.foo.bar.MySaltSource
beans = {
saltSource(MySaltSource) {
// set properties
}
}
另请参阅此处了解可能需要将插件插入调试以确定它是如何工作的:
您需要在使用相同salt密钥的两个系统上测试salt算法测试 - 您应该在两个系统上找到它们然后以相同的方式加密/解密。 (因为他们都有相同的门钥匙)
无论如何,对于它的价值,你已经以一定的方式对你进行了春季安全加密(你没有概述)现在有点太迟了,因为它们都需要 - 重新加密< / p>
如果您使用相同的盐对两个系统进行测试,最重要的是有一个使用此盐配置了弹簧安全性的测试系统,并首先在您的.Net C#系统上测试结果
此外,我轻松通过它,并注意到默认加密与用户名相关的事情 - 所以这可能会让你知道如何为其他目的写一些类似的东西(找出它用于默认密钥的东西)