2014-10-11 4 views
1

Я новичок в Apache Shiro. Я слежу за документами и множеством других учебников, блогов и т. Д., Но я просто не могу заставить аутентификацию работать. Когда я пытаюсь войти с действительным именем пользователя и паролем, я всегда получаю InvalidCredentialsException. Я использую DynamoDB как пользовательский мир для хранения учетных данных пользователей, но я действительно не думаю, что это имеет значение. Очевидно, что я сохраняю и/или выполняю соответствующие учетные данные, это неверно. Вот мои настройки:Ошибка аутентификации с Apache Shiro

Shiro.ini:

[main] 
myRealm = com.enki.closing.users.DynamoDBRealm 

credentialsMatcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher 
credentialsMatcher.storedCredentialsHexEncoded = false 
credentialsMatcher.hashIterations = 1024 

myRealm.credentialsMatcher = $credentialsMatcher 

Создать учетную запись:

String password = ... 
ByteSource passwordSalt = new SecureRandomNumberGenerator().nextBytes(); 
String hashedPasswordBase64 = new Sha256Hash(password, passwordSalt, 1024).toBase64(); 

// store the hashedPassword and salt in DynamoDB... 
// I've tried storing the salt with and without base64 encoding. 

пароль и соль хранится штраф в DynamoDB, значения выглядят хорошо. Вот пользовательская область для аутентификации:

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { 
    UsernamePasswordToken userPass = (UsernamePasswordToken) token; 
    String username = userPass.getUsername(); 
    ... 
    // pull the matching password and salt out of DynamoDB, no problems... 
    ByteSource passwordSalt = ByteSource.Util.bytes(storedPasswordSalt); 
    return new SimpleAuthenticationInfo(username, passwordHash, passwordSalt, getName()); 
} 

Это все в значительной степени то, что документы говорят мне делать, но есть что-то не так. Когда я попробую войти, он получит InvalidCredentialsException.

ответ

1

Я понял, как заставить его работать. Я должен был изменить это (в моей пользовательской области действия осущ):

ByteSource passwordSalt = ByteSource.Util.bytes(storedPasswordSalt); 

к этому:

ByteSource passwordSalt = ByteSource.Util.bytes( 
            Base64.decode(storedPasswordSalt)); 
Смежные вопросы