我遵循了youtube中有关如何在春季启动时进行身份验证和授权的教程。在这些教程中,他们可以将ClientDetailsServiceConfigurer中的数据输入到基本auth中,并可以获得访问令牌,但是我不能。我不知道怎么了,我完全是这个主题的新手。
@Configuration
@EnableAuthorizationServer
public class AuthorizationServer extends AuthorizationServerConfigurerAdapter{
@Autowired
private AuthenticationManager authenticationManager;
// return true if user is not anonymous
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception{
security.allowFormAuthenticationForClients();
}
// defines client details service
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory().withClient("angelica").secret("123").authorizedGrantTypes("client_credentials")
.scopes("read","write").autoApprove(true);
}
// defines the auth and token endpoints and also the token services
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.authenticationManager(authenticationManager);
}
}
public class CustomUserDetails implements UserDetails{
private static final long serialVersionUID = 1L;
private String uname;
private String passw;
Collection<? extends GrantedAuthority> authorities;
public CustomUserDetails(User user) {
this.uname = user.getName();
this.passw = user.getPassw();
this.authorities = Arrays.stream(user.getRole().split(","))
.map(SimpleGrantedAuthority::new)
.collect(Collectors.toList());
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
// TODO Auto-generated method stub
return authorities;
}
@Override
public String getPassword() {
// TODO Auto-generated method stub
return passw;
}
@Override
public String getUsername() {
// TODO Auto-generated method stub
return uname;
}
@Override
public boolean isAccountNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isAccountNonLocked() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isCredentialsNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isEnabled() {
// TODO Auto-generated method stub
return true;
}
}
@SpringBootApplication
@EntityScan(basePackages = {"com.example.demo"})
public class RestApplication implements ApplicationRunner{
private static final Logger log = LogManager.getLogger(RestApplication.class);
public static void main(String[] args) {
SpringApplication.run(RestApplication.class, args);
}
@Override
public void run(ApplicationArguments args) throws Exception {
log.debug("this is debug");
}
@Autowired
public void authenticationManager(AuthenticationManagerBuilder builder, UserRepository repo) throws Exception {
builder.userDetailsService(new UserDetailsService() {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return new CustomUserDetails(repo.findByName(username));
}
});
}
}
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</dependency>
</dependencies>
那么,如何获取访问令牌?我输入了localhost:8080 / oauth / token,但它说内部服务器错误。