记录下使用oauth2 获取token时踩的坑
1.控制台报错:There is no PasswordEncoder mapped for the id "null"
加密方式:
public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }
排查过程中发现,数据库的密码填的不是BCryptPasswordEncoder加密的密码!!!!!
更正后,再次测试发现错误2
2.Encoded password does not look like BCrypt
百思不得解,将加密方式改为:
public PasswordEncoder passwordEncoder() { return NoOpPasswordEncoder.getInstance(); }
数据库密码改为未加密的密码后发现还是不行.
偶然百度时发现,其他人的程序加密这样写的:
@Bean public PasswordEncoder passwordEncoder() { return NoOpPasswordEncoder.getInstance(); }
试了一下可以了!!!!我曹,必须要使用bean的形式被spring托管?
将加密方式重新改回
@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }
发现还是一样的错误!!!google后看到了这篇帖子,
https://stackoverflow.com/questions/49582971/encoded-password-does-not-look-like-bcrypt
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients
.inMemory()
.withClient("clientapp")
.authorizedGrantTypes("password","refresh_token")
.authorities("USER")
.scopes("read", "write")
.resourceIds(RESOURCE_ID)
.secret(passwordEncoder.encode("SECRET"));
}
.secret(passwordEncoder.encode("SECRET")) 这里也需要加密!!!!!
测试一下,终于OJBK