Wie füge ich den benutzerdefinierten UserDetailsService
unten zu this Spring OAuth2 sample hinzu?Hinzufügen von benutzerdefiniertem UserDetailsService zu Spring Security OAuth2 App
Der Standard user
mit Standard password
in der application.properties
Datei des authserver
App definiert.
Allerdings würde Ich mag die folgende benutzerdefinierte UserDetailsService
zu the demo
package of the authserver
app zu Testzwecken hinzuzufügen:
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
nicht autowired
noch ist, und es verwendet absichtlich unsichere Passwörter, weil es nur zu Testzwecken konzipiert.
Welche konkreten Änderungen müssen the GitHub sample app gemacht werden, so dass ein Benutzer als username=Samwise
mit password=TheShire
anmelden kann, oder als username=Frodo
mit password=MyRing
? Müssen Änderungen an AuthserverApplication.java
oder anderswo vorgenommen werden?
VORSCHLÄGE:
Die Spring OAuth2 Developer Guide sagt ein GlobalAuthenticationManagerConfigurer
zu verwenden, um eine UserDetailsService
global zu konfigurieren. Das Googlen dieser Namen führt jedoch zu weniger als nützlichen Ergebnissen.
Auch eine andere Anwendung, die Sicherheit interne Feder verwendet STATT OAuth verwendet die folgende Syntax, um die UserDetailsService
zu anschließen, aber ich bin nicht sicher, wie die Syntax der aktuellen OP anzupassen:
@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);
}
}
I versuchte @Autowire
innerhalb des OAuth2AuthorizationConfig
mit Users
zum AuthorizationServerEndpointsConfigurer
zu verbinden, 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 Feder Boot-Protokolle anzeigen, dass der Benutzer Samwise
wa s nicht gefunden, was bedeutet, dass UserDetailsService
nicht erfolgreich angeschlossen wurde. Hier ist der relevante Auszug aus dem Frühjahr 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 noch versuchen?