2013-04-09 2 views
1

Я использую Сиро, чтобы обеспечить мое заявление, и теперь проблема заключается в том, как выполнить вход с хэшированном паролем для следующих сценариев:Shiro - как войти с хэшированном паролем

1, Автоматический вход для пользователя после того, как они нажимают на электронная почта активации.

2, Войти через Facebook, найти пользователя по facebookId из базы данных и попытаться войти в систему, но у меня есть hashed passwrod, есть ли у нас какие-либо способы расшифровать хешированный пароль.

Это как я зашифровать свой пароль хранится в базе данных:

new Sha256Hash(password).toHex() 

Ниже мой код Логин.

Subject currentUser = SecurityUtils.getSubject(); 
if (!currentUser.isAuthenticated()) { 
    UsernamePasswordToken token = new UsernamePasswordToken(email, password, rememberMe); 
    currentUser.login(token); 
} 

Примите меня, если этот вопрос странный, и спасибо заранее.

ответ

0

Цель хеш-функции должна быть неразрешимой. Так что нет, он не может быть расшифрован. Для достижения обеих целей вы можете настроить дополнительные области. Один для активации электронной почты, другой для входа в систему.

Для активации электронной почты вы можете создать временную учетную запись, создать произвольный токен активации и отправить электронное письмо. Затем пользователь нажимает ссылку активации и приложение пытается выполнить проверку подлинности пользователя с маркером в запросе HTTP:

String token = //get from request 
subject.authenticate(new ActivationToken(token)); 

Активация Realm проверяет, является ли этот маркер. И если он действителен, он удаляет токен из учетной записи и аутентифицирует его.

Что касается области facebook, вы можете использовать секрет, полученный путем аутентификации через аутентификацию, чтобы получить информацию о пользователе, и если нет аутентифицированного пользователя erros.

+0

Очень ясно, что я хочу, спасибо большое. – gozizibj

0

По умолчанию пароль от UsernamePasswordToken хэшируется и сравнивается с хешем из базы данных. Вы можете изменить свое царство. Не делал хэш.

Для обычного входа вы можете сделать хэш пароля и поместить в UsernamePasswordToken. И в области только сравнить хеши

Смежные вопросы