Hinzufügen von benutzerdefinierten UserDetailsService zu Spring Security OAuth2-app

Wie füge ich die custom UserDetailsService unten, um in diesem Frühjahr OAuth2 Probe?

Den Standard - user mit Standard - password definiert wird, in der Anwendung.Eigenschaften - Datei des authserver app.

Allerdings würde ich gerne fügen Sie die folgenden benutzerdefinierten UserDetailsService zu die demo - Paket authserver app für Testzwecke:

package demo;

import java.util.List;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.provisioning.UserDetailsManager;
import org.springframework.stereotype.Service;

@Service
class Users implements UserDetailsManager {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        String password;
        List<GrantedAuthority> auth = AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_USER");
        if (username.equals("Samwise")) {
            auth = AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_HOBBIT");
            password = "TheShire";
        }
        else if (username.equals("Frodo")){
            auth = AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_HOBBIT");
            password = "MyRing";
        }
        else{throw new UsernameNotFoundException("Username was not found. ");}
        return new org.springframework.security.core.userdetails.User(username, password, auth);
    }

    @Override
    public void createUser(UserDetails user) {//TODO Auto-generated method stub
    }

    @Override
    public void updateUser(UserDetails user) {//TODO Auto-generated method stub
    }

    @Override
    public void deleteUser(String username) {//TODO Auto-generated method stub
    }

    @Override
    public void changePassword(String oldPassword, String newPassword) {
        //TODO Auto-generated method stub
    }

    @Override
    public boolean userExists(String username) {
        //TODO Auto-generated method stub
        return false;
    }
}

Wie Sie sehen können, diese UserDetailsService ist nicht autowired noch, und es bewusst verwendet unsichere Passwörter, denn es ist nur für Testzwecke geeignet.

Welche konkreten änderungen vorgenommen werden müssen,auf der GitHub-Beispiel-app, so dass ein Benutzer sich einloggen können als username=Samwise mit password=TheShire oder als username=Frodo mit password=MyRing? Haben Veränderungen vorgenommen werden müssen, AuthserverApplication.java oder anderswo?


VORSCHLÄGE:


Den Frühjahr OAuth2 Developer Guide sagt zu einem GlobalAuthenticationManagerConfigurer zu konfigurieren UserDetailsService weltweit. Aber googeln mit diesen Namen weniger produziert als hilfreiche Ergebnisse.

Auch eine andere app, die verwendet interne Feder Sicherheit STATT OAuth verwendet die folgende syntax, um hook up die UserDetailsService, aber ich bin nicht sicher, wie Sie Sie, um Ihre syntax, um die aktuelle OP:

@Order(Ordered.HIGHEST_PRECEDENCE)
@Configuration
protected static class AuthenticationSecurity extends GlobalAuthenticationConfigurerAdapter {

    @Autowired
    private Users users;

    @Override
    public void init(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(users);
    }
}

Versuchte ich mit @Autowire innerhalb der OAuth2AuthorizationConfig zu verbinden Users zu den AuthorizationServerEndpointsConfigurer wie folgt:

@Autowired//THIS IS A TEST
private Users users;//THIS IS A TEST

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
   endpoints.authenticationManager(authenticationManager)
        .accessTokenConverter(jwtAccessTokenConverter())
        .userDetailsService(users)//DetailsService)//THIS LINE IS A TEST
        ;
}

Aber die Spring-Boot-logs zeigen an, dass der Benutzer Samwise wurde nicht gefunden, was bedeutet, dass die UserDetailsService war nicht erfolgreich angeschlossen. Hier ist der entsprechende Auszug aus der Spring-Boot-Protokolle:

2016-04-20 15:34:39.998 DEBUG 5535 --- [nio-9999-exec-9] o.s.s.a.dao.DaoAuthenticationProvider    :  
        User 'Samwise' not found
2016-04-20 15:34:39.998 DEBUG 5535 --- [nio-9999-exec-9]   
        w.a.UsernamePasswordAuthenticationFilter :  
        Authentication request failed:  
        org.springframework.security.authentication.BadCredentialsException:  
        Bad credentials

Was kann ich sonst noch versuchen?

InformationsquelleAutor CodeMed | 2016-04-19
Schreibe einen Kommentar