Общий Java API для преобразования пароля / хэша / дайджеста
Мое веб-приложение защищено паролями, переваренными паролем, с использованием управляемой контейнером аутентификации. Я хотел бы уменьшить связь с моим текущим контейнером, имея службу в JNDI, которая обрабатывает изменение / проверку пароля. Я был после чего-то вроде этого:
/**
* A service for mutating passwords with salt.
* Note that the same password should yield different mutations every time.
*/
public interface PasswordMutationService {
/**
* Mutates the given password for storage purposes.
* The 'salt' must be coded into the result so that it can be extracted later.
*/
String mutatePassword(String password);
/**
* Confirm the given password was used to create the given stored mutation.
*
* @param candidatePassword The password supplied by a user that wants to be authenticated.
* @param storedMutatedPassword A mutation of the users password retrieved from storage.
*/
boolean verifyMutatedPassword(String candidatePassword, String storedMutatedPassword);
}
Знаете ли вы об API, который обеспечивает этот интерфейс, поэтому мне не нужно писать и управлять своим собственным? Мне трудно поверить, что это не где-то в Java EE.
ПРИМЕЧАНИЕ: я не за царством Tomcat, это уже сделано. И мне не нужна реализация, это тоже сделано.
1 ответ
Чтобы отделить мое приложение от реализации дайджеста пароля, мне действительно нужен только один метод:
String mutatePassword(String password)
Контейнерный плагин может быть связан с дайджест-реализацией без особого вреда, поэтому для его работы не требуется "verifyMutatedPassword()" в интерфейсе.
После просмотра некоторых API JDK7 я нашел кое-что, что могло бы сделать работу (если вас не легко обидеть):
public interface Provider<T> {
public T invoke(T request);
}
Это означает, что мое приложение может подключиться к мутации пароля с помощью:
InitialContext ctx = new InitialContext();
passwordMutator = (Provider<String>) ctx.lookup("java:comp/env/bean/appPasswordMutator");
Конфигурация контейнера tomcat для изменения пароля и области безопасности:
<Resource name="bean/appPasswordMutator" auth="Container"
factory="org.apache.naming.factory.BeanFactory"
type="pkg.PasswordMutator"
seedNumBytes="8"
keyNumBits="160"
digestIterationCount="10000"
singleton="true"/>
<Realm className="pkg.PasswordMutationRealm"
userCredCol="usercred"
passwordMutatorName="bean/appPasswordMutator"
localPasswordMutator="true"
localDataSource="true"
dataSourceName="jdbc/appDb"
userTable="usercred"
userNameCol="username"
userRoleTable="userrole"
roleNameCol="userrole"/>
Рабочая демоверсия доступна в моем репозитории SVN по адресу: https://subversion.assembla.com/svn/freshcode_public/learn/tomcat-maven-plugin(см. Файл READ_ME.txt).