Frühjahr Oauth2. Passwort-encoder ist nicht DaoAuthenticationProvider

Ich bin ganz neu auf den Frühling Oauth und Spring Security. Ich versuche, die client_credentials fließen in mein Projekt. Jetzt habe ich es geschafft Benutzer meine eigenen CustomDetailsService, um zu Holen, client_id und Passwort (secret) aus einer Datenbank, die bereits in meinem system. Das problem ist nur, dass ich nicht ändern kann den Passwort-encoder in DaoAuthenticationProvider, die von AuthorizationServer - es standardmäßig so eingestellt ist, PlaintextPasswordEncoder. Ich war nicht in der Lage, es so konfigurieren, dass es zum Beispiel SHAPasswordEncoder. Er verwendet immer den Klartext-encoder. Ich wahrscheinlich gar nicht verstehen, der flow gut genug, wie ich bin ein Neuling im Frühjahr.

Hier ist etwas code von mir (mit nicht funktionierenden Konfiguration der DaoAuthenticationProvider):

SecurityConfig.java

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

private static final String RESOURCE_ID = "restservice";

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/register/**");

}

@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationProvider(daoAuthenticationProvider());
}

@Bean
public DaoAuthenticationProvider daoAuthenticationProvider() {
    DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
    daoAuthenticationProvider.setUserDetailsService(userDetailsService());
    daoAuthenticationProvider.setPasswordEncoder(passwordEncoder());
    return daoAuthenticationProvider;
}

@Bean
public PasswordEncoder passwordEncoder() {
    return new ShaPasswordEncoder();
}

@Configuration
@EnableAuthorizationServer
protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private MyCustomClientDetailsService myCustomClientDetailsService;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints)
            throws Exception {
        endpoints.tokenStore(tokenStore());
    }

    @Bean
    public ResourceServerTokenServices defaultTokenServices() {
        final DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        defaultTokenServices.setSupportRefreshToken(true);
        defaultTokenServices.setTokenStore(tokenStore());
        return defaultTokenServices;
    }

    @Bean
    public TokenStore tokenStore() {
        return new InMemoryTokenStore();
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.withClientDetails(myCustomClientDetailsService);
    }

    @Bean
    public MyCustomClientDetailsService detailsService() {
        return new MyCustomClientDetailsService();
    }
}

@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {

    ...
}
}

- Und custom-ClientDetailsService Klasse:

public class MyCustomClientDetailsService implements ClientDetailsService {

@Autowired
private UserService userService;

@Override
public ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException {

    User fan = userService.getFan(clientId);

    if (fan == null) {
        throw new NoSuchClientException("No client with requested id: " + clientId);
    } 

    BaseClientDetails details = new BaseClientDetails(clientId, restservice, "write", "client_credentials", "USER");

    details.setClientSecret(fan.getEncodedPassword()); 

    return details;
}
}

Den encodedPassword, dass ist aus meiner UserService ist immer ein schlechtes Berechtigung, als DaoAuthenticationProvider hat eine PlaintextPasswordEncoder standardmäßig festgelegt.

Was bin ich dort?
Ist es möglich, den Passwort-encoder in der DaoAuthenticationProvider, die verwendet wird, für die überprüfung der Anmeldeinformationen hier? Oder muss ich schreiben, dass meine eigenen AuthenticationProvider, dass es zu überprüfen wäre, wie ich will?

  • Ich habe das exakt gleiche problem, Hast du jemals eine Lösung finden?
InformationsquelleAutor gajos | 2014-09-24
Schreibe einen Kommentar