我想在我的Grails應用程序中使用Spring Security插件使用BCrypt密碼散列。我已通過添加以下內容Config.groovy
使用Spring Security的BCrypt密碼散列Grails插件
grails.plugins.springsecurity.password.algorithm = 'bcrypt'
啓用BCrypt我也定義瞭如下的編解碼器使用BCrypt編碼paswords簡化:當我開始開發模式的應用
public class PasswordCodec {
// it doesn't seem to be possible to dependency-inject codecs, so lookup the bean ourselves
@Lazy
private static PasswordEncoder passwordEncoder = Holders.grailsApplication.mainContext.getBean('passwordEncoder')
static encode = { str ->
passwordEncoder.encodePassword(str.toString(), null)
}
}
的數據庫自舉了幾個帳戶(其中的每一個具有相同的密碼,如
3.times { i ->
def username = "user$i"
def password = "secret".encodeAsPassword()
new User(username: username, password: password).save()
// also assign the user a role
}
如果我期待在數據庫中,我看到EA的編碼值這些用戶的密碼ch是不同的!因此,當用戶嘗試登錄並輸入密碼「secret」時,BCrypt編碼的密碼值與數據庫中保存的密碼值不匹配也就不足爲奇了,因爲似乎字符串的BCrypt編碼值以某種方式發生了變化隨着時間的推移。
顯然我在這裏做錯了事,但我不知道是什麼?
我假設你的用戶域沒有處理密碼編碼的典型s2 quickstart代碼? –
此外,我認爲現在默認情況下啓用了salting,這是基於用戶名的,因此對於每個密碼都是不同的salt:http://grails-plugins.github.io/grails-spring-security-core/docs/manual /guide/passwords.html#salt ...假設你仍然有生成的s2 quickstart代碼。 –
@JoshuaMoore不,我沒有在用戶類本身做任何密碼編碼(我沒有使用s2-quickstart) –