使用-PasswordEncoderFactories.createDelegatingPasswordEncoder()

时间:2019-04-06 20:11:13

标签: java spring-security-oauth2

申请后,我在Spring安全性中遇到以下错误:

PasswordEncoderFactories.createDelegatingPasswordEncoder()

项目依赖项:

  • Spring Boot2.1.3
  • Spring-cloud-starter-oauth2

我尝试使用以下两种方法:

第一种方法:

@Override
 protected void configure(AuthenticationManagerBuilder auth) throws Exception {

final PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();

        auth.inMemoryAuthentication()
            .withUser("user")
            .password(encoder.encode("password"))
            .roles("USER");

    }

错误:

java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
at org.springframework.security.crypto.password.DelegatingPasswordEncoder$UnmappedIdPasswordEncoder.matches

第二:方法-

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

final BCryptPasswordEncoder bcrypt = new BCryptPasswordEncoder();
        auth.inMemoryAuthentication()
            .withUser("user")
            .password(encoder.encode("password"))
            .roles("USER");

    }

错误:

java.lang.IllegalArgumentException: password is not bcrypt type

我没有尝试过{noop}密码,因为它已经从Spring5中删除了。 在网站上看到了许多解决方案,但无法解决我的问题。

1 个答案:

答案 0 :(得分:0)

我有相同的错误消息,只是解决了。

您的第一种方法

   PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();

    auth.inMemoryAuthentication()
        .withUser("user")
        .password(encoder.encode("password"))
        .roles("USER");

仅是解决方案的第一步

我认为您还实现了 AuthorizationServerConfigurerAdapter 。在此适配器实现中,您指定了导致错误的 ClientSecret

clients.inMemory()
        .withClient("ClientIdValue")
        .secret("ClientSecretValue")
        .authorizedGrantTypes("password", "refresh_token")

您应该像在方法中一样添加 {noop} PasswordEncoder 来解决问题。

clients.inMemory()
        .withClient("ClientIdValue")
        .secret("{noop}ClientSecretValue")
        .authorizedGrantTypes("password", "refresh_token")