我正在努力达到可以为Oauth服务器动态注册新客户端的地步。我遇到的问题(或我要理解的问题)是,最初没有使用密码编码器时,客户端机密以纯文本形式存储在数据库中。
谷歌搜索之后,我发现必须设置一个PasswordEncoder来处理客户端机密的编码/解码。
@Override
public void configure(ClientDetailsServiceConfigurer configurer) throws Exception {
configurer.jdbc(dataSource).passwordEncoder(getPasswordEncoder());
}
现在我确实看到编码的客户端机密存储在数据库中。问题是,现在从服务中请求令牌时,我被迫在请求新令牌时使用编码的客户端机密(而不是使用纯文本版本)
curl -k -u 'TEST_USER:05a2fcc7-7759-4354-9366-a7c8cf650aae' http://localhost:8080/oauth/token -X POST -d 'response_type=token&client_id=TEST_USER&username=TEST_USERNAME&password=TEST_PASSWORD&scope=process&grant_type=password'
{“错误”:“未经授权”,“错误说明”:“需要完全验证才能访问此资源”}
就像我使用编码的客户端机密一样,该服务会按应有的方式生成令牌。
我要实现的目的是在数据库中编码密码,并能够在请求中使用纯文本版本。
我缺少什么或做错了什么?
答案 0 :(得分:0)
万一有其他人在寻找,解决方案是直接使用DelegatingPasswordEncoder而不是像我正在使用的BCrypt(这在原始问题的代码示例中并不明显)。
@Bean
public PasswordEncoder getPasswordEncoder(){
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}