Двустороннее шифрование с помощью Spring Security 3.1 - PullRequest
0 голосов
/ 10 февраля 2012

Spring Security 3.1 имеет изящный и удобный способ включить желаемый хеш в конфигурацию XML, который работает как чудо:

<bean id="securityDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/myDataSource"/>
    <property name="resourceRef" value="true"/>
</bean>

<bean id="encoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" />

<security:authentication-manager>
    <security:authentication-provider>
        <security:password-encoder ref="encoder" />
        <security:jdbc-user-service 
            data-source-ref="securityDataSource"
            authorities-by-username-query="SELECT username, authority FROM user_roles WHERE username = ?"
            users-by-username-query="SELECT username, password, enabled FROM users WHERE username = ?"
        />        
    </security:authentication-provider>
</security:authentication-manager>

Я взглянул на этот класс StandardPasswordEncoder, который имеет два применимыхпубличные методы: encode () и match ().Метод match () предположительно используется Spring для сравнения хешированной версии введенного пароля с хешированным паролем в базе данных.Кажется, что метод encode () используется для генерации хешированной строки для хранения в базе данных.Я предполагаю, что вы можете использовать это для генерации или изменения пароля по желанию.

Мой вопрос таков: учитывая вполне законную причину этого, насколько трудно (или вообще возможно) заменить егоэтот хеш с двусторонним методом шифрования?Я не хочу жертвовать всей мощью и удобством, которые предлагает эта весенняя конфигурация безопасности, но необходимо (для бизнес-пользователей) иметь доступ к простому текстовому паролю по желанию.

1 Ответ

2 голосов
/ 11 февраля 2012

Пока вы предоставляете реализацию интерфейса PasswordEncoder, Spring Security будет счастлив. Не имеет значения, хешированы ли пароли или обратимо зашифрованы.

Тогда вам, конечно, потребуется предоставить доступ к ключу реализации для проверки паролей. Это было бы дополнительной головной болью конфигурации и угрозой безопасности. Альтернативой может быть шифрование с использованием асимметричного ключа, но также использование хеша, как описано здесь .

Так что нет, это не сложно. Хорошая это идея или нет - другое дело. Мне было бы интересно узнать, каковы требования бизнеса.

...