Benutzerdefinierten UserDetailsService zur Spring Security OAuth2-App hinzufügen
Wie füge ich das benutzerdefinierte @ hinzUserDetailsService
unten zudieses Frühjahrs-OAuth2-Beispiel?
Der Standarduser
mit Standardpassword
ist im @ definieapplication.properties
Datei desauthserver
app.
Ich möchte jedoch die folgenden benutzerdefinierten @ hinzufügUserDetailsService
zudasdemo
Paket desauthserver
app zu Testzwecken:
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, diesesUserDetailsService
ist nichtautowired
noch nicht, und es verwendet absichtlich unsichere Passwörter, da es nur zu Testzwecken entwickelt wurde.
Welche spezifischen Änderungen müssen an @ vorgenommen werdedie GitHub Beispiel-App damit sich ein Benutzer als @ anmelden kausername=Samwise
mitpassword=TheShire
oder alsusername=Frodo
mitpassword=MyRing
? Müssen Änderungen an @ vorgenommen werdeAuthserverApplication.java
oder woanders?
VORSCHLÄGE
DasSpring OAuth2 Developer Guide sagt ein @ zu verwendGlobalAuthenticationManagerConfigurer
um ein @ zu konfigurierUserDetailsService
global. Wenn Sie diese Namen googeln, erhalten Sie jedoch weniger als hilfreiche Ergebnisse.
Auch eine andere App, die die interne Federsicherheit verwendet. STATT OAuth verwendet die folgende Syntax, um das @ anzuschließeUserDetailsService
, aber ich bin nicht sicher, wie ich die Syntax an das aktuelle OP anpassen soll:
@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);
}
}
Ich habe versucht mit@Autowire
innerhalb desOAuth2AuthorizationConfig
verbindenUsers
zumAuthorizationServerEndpointsConfigurer
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-Protokolle zeigen an, dass der BenutzerSamwise
wurde nicht gefunden, was bedeutet, dass dasUserDetailsService
wurde nicht erfolgreich verbunden. Hier ist der relevante Auszug aus den Spring Boot-Protokollen:
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 probieren?