Spring Oauth似乎无法解码客户端机密

时间:2020-04-15 07:21:32

标签: spring oauth

我正在努力达到可以为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'

{“错误”:“未经授权”,“错误说明”:“需要完全验证才能访问此资源”}

就像我使用编码的客户端机密一样,该服务会按应有的方式生成令牌。

我要实现的目的是在数据库中编码密码,并能够在请求中使用纯文本版本。

我缺少什么或做错了什么?

1 个答案:

答案 0 :(得分:0)

万一有其他人在寻找,解决方案是直接使用DelegatingPasswordEncoder而不是像我正在使用的BCrypt(这在原始问题的代码示例中并不明显)。

@Bean
public PasswordEncoder getPasswordEncoder(){
    return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
相关问题