Spring 安全性 - 使用 CAS、MySQL、SearchModeSearchDatabaseAuthenticationHandler 和 BasicDataSource 的 Bcrypt
Spring Security - Bcrypt with CAS, MySQL, SearchModeSearchDatabaseAuthenticationHandler, and BasicDataSource
如果我有一个数据库存储使用 Spring 的 Bcrypt 编码器加密的用户名和密码,我将如何使用当前设置将其解码回 Spring 中的纯文本?
我的 MySQL 有这个 table 用于身份验证:
username | password | enabled
----------------------------------------
varchar(50) | varchar(100) | tinyint
密码字段将包含每个用户的 Bcrypt 密码。
现在是 CAS 的 deployerConfigContext.xml。
<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler">
<property name="tableUsers"><value>user_authentication</value></property>
<property name="fieldUser"><value>username</value></property>
<property name="fieldPassword"><value>password</value></property>
<property name="dataSource" ref="dataSource"/>
</bean>
我将数据源定义为:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/user_mgt</value>
</property>
<property name="username"><value>root</value></property>
<property name="password"><value>test_pw</value></property>
</bean>
我不确定我是否可以在没有自定义的情况下实现 Bcrypt 解码。
当您使用散列密码时,不可能取回纯文本,为此我们使用散列算法来放置散列密码。
要对用户进行身份验证,您必须将数据库中的散列密码与用户输入的散列密码进行比较。
Spring 安全人员为您完成,您只需告诉 spring 安全人员您在配置中使用了 BCryptPasswordEncoder:
<authentication-manager>
<authentication-provider>
.......
<password-encoder red="encoder"/>
</authentication-provider>
</authentication-manager>
.........
<beans:bean id="encoder" class="org.springframework.security.crypto.password.BCryptPasswordEncoder"/>
请参阅 spring 安全文档
如果我有一个数据库存储使用 Spring 的 Bcrypt 编码器加密的用户名和密码,我将如何使用当前设置将其解码回 Spring 中的纯文本?
我的 MySQL 有这个 table 用于身份验证:
username | password | enabled
----------------------------------------
varchar(50) | varchar(100) | tinyint
密码字段将包含每个用户的 Bcrypt 密码。
现在是 CAS 的 deployerConfigContext.xml。
<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler">
<property name="tableUsers"><value>user_authentication</value></property>
<property name="fieldUser"><value>username</value></property>
<property name="fieldPassword"><value>password</value></property>
<property name="dataSource" ref="dataSource"/>
</bean>
我将数据源定义为:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/user_mgt</value>
</property>
<property name="username"><value>root</value></property>
<property name="password"><value>test_pw</value></property>
</bean>
我不确定我是否可以在没有自定义的情况下实现 Bcrypt 解码。
当您使用散列密码时,不可能取回纯文本,为此我们使用散列算法来放置散列密码。 要对用户进行身份验证,您必须将数据库中的散列密码与用户输入的散列密码进行比较。 Spring 安全人员为您完成,您只需告诉 spring 安全人员您在配置中使用了 BCryptPasswordEncoder:
<authentication-manager>
<authentication-provider>
.......
<password-encoder red="encoder"/>
</authentication-provider>
</authentication-manager>
.........
<beans:bean id="encoder" class="org.springframework.security.crypto.password.BCryptPasswordEncoder"/>
请参阅 spring 安全文档