Общий 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).

Другие вопросы по тегам