Поставщик токена доступа вернул нулевой токен доступа, который является недействительным в соответствии с договором весной oauth2 - PullRequest
0 голосов
/ 23 апреля 2019

Я студент и занимаюсь весенней безопасностью oauth2.Но когда я запускаю клиент, после ввода имени пользователя, пароля и прав доступа, в моей консоли выдается сообщение об ошибке: «Поставщик токена доступа вернул нулевой токен доступа, который является недопустимым в соответствии с контрактом».Я исправил это за 1 неделю, но безуспешно.Кто-нибудь может мне помочь?Ниже приведен код сервера и клиента.

Это исходный код на github: Сервер: https://github.com/Akourtiim/oauth2-spring-boot-2.0.2 Клиент: https://github.com/RoHanh96/Oauth2_SSO/tree/master/spring-security-client.

Спасибо за чтение.

Конфигурация сервера авторизации:

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends 
AuthorizationServerConfigurerAdapter {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource oauthDataSource() {
    return DataSourceBuilder.create().build();
}

@Bean
public JdbcClientDetailsService clientDetailsService() {
    return new JdbcClientDetailsService(oauthDataSource());
}

@Bean
public TokenStore tokenStore() {
    return new JdbcTokenStore(oauthDataSource());
}

@Bean
public ApprovalStore approvalStore() {
    return new JdbcApprovalStore(oauthDataSource());
}

@Bean
public AuthorizationCodeServices authorizationCodeServices() {
    return new JdbcAuthorizationCodeServices(oauthDataSource());
}

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients.withClientDetails(clientDetailsService());
}

@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
    oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("isAuthenticated()");
}

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    final TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
    tokenEnhancerChain.setTokenEnhancers(Arrays.asList(tokenEnhancer()));
    endpoints
            .approvalStore(approvalStore())
            .authorizationCodeServices(authorizationCodeServices())
            .tokenStore(tokenStore()).tokenEnhancer(tokenEnhancerChain);
}

@Bean
public TokenEnhancer tokenEnhancer() {
    return new CustomTokenEnhancer();
}
}

CustomTokenEnhancer.java:

    public class CustomTokenEnhancer implements TokenEnhancer {

    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
        final Map<String, Object> additionalInfo = new HashMap<>();
        additionalInfo.put("organization", authentication.getName() + randomAlphabetic(4));
        ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
        return accessToken;
    }
}

WebSecurityConfiguration.java (сервер аутентификации)

@EnableWebSecurity
@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {


@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

@Bean
@Override
public UserDetailsService userDetailsServiceBean() throws Exception {
    return new JdbcUserDetails();
}

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/webjars/**","/resources/**");

}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers("/login","/logout.do").permitAll()
            .antMatchers("/**").authenticated()
            .and()
            .formLogin()
            .loginProcessingUrl("/login.do")
            .usernameParameter("username")
            .passwordParameter("password")
            .loginPage("/login")
            .and()
            .logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout.do"))
            .and()
            .userDetailsService(userDetailsServiceBean());
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsServiceBean())
    .passwordEncoder(passwordEncoder());
}
}
...