ClientDetailsS​​erviceConfigurer客户端数据未经授权

时间:2020-07-19 18:49:45

标签: spring spring-boot spring-security oauth-2.0

我遵循了youtube中有关如何在春季启动时进行身份验证和授权的教程。在这些教程中,他们可以将ClientDetailsS​​erviceConfigurer中的数据输入到基本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);
    }
    
}

enter image description here

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,但它说内部服务器错误。

0 个答案:

没有答案