весенний авторизационный код авторизации разрешен без авторизации - PullRequest
0 голосов
/ 28 ноября 2018

В нашей команде мы внедрили привязку аккаунта с использованием кода авторизации Spring auth2, который впервые отображает страницу входа и приводит к успеху, приводящему к access_token и refresh_token.Однако, когда мы удаляем связь с учетной записью и пытаемся установить связь снова, она не отображает страницу входа и напрямую показывает успешность входа в систему с учетной записью, связанной с предыдущими учетными данными пользователя.При удалении ссылок мы подтвердили, что клиент (amazon) очищает токен доступа.

Любая помощь или подсказка будут полезны.

подробности maven pom с использованными зависимостями и версиями ключей.

  • spring-boot-starter-parent = 1.4.3.RELEASE
  • spring-security-oauth2 =2.2.0.RELEASE
  • spring-boot-starter-security
  • spring-boot-starter-web

Настройка конфигурации производится следующим образом.

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    @Autowired
    DataSource dataSourceOauth;

    @Value("${oauth_signing_key}")
    private String signingKey; // Key used to digitally sign the JWT token

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private CurrentClient currentClient;

    /**
     * Configure the non-security features of the Authorization Server endpoints, like token store, 
     * token customizations, user approvals and grant types.
     */
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
        tokenEnhancerChain.setTokenEnhancers(Arrays.asList(tokenEnhancer(), accessTokenConverter()));
        endpoints.tokenStore(tokenStore()).tokenEnhancer(tokenEnhancerChain).authenticationManager(authenticationManager);
        endpoints.pathMapping("/oauth/authorize", "/vialexa/oauth/authorize");
        endpoints.pathMapping("/oauth/token", "/vialexa/oauth/token");
    }

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

    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setSigningKey(signingKey);
        return converter;
    }

    @Bean
    public TokenStore tokenStore() {
        return new JwtTokenStore(accessTokenConverter());
    }


    public JdbcClientDetailsService clientDetailsService() {
        JdbcClientDetailsService detailsService = new JdbcClientDetailsService(dataSourceOauth) {
            @Override
            public ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException {
                ClientDetails clientDetails = null;
                clientDetails = super.loadClientByClientId(clientId);
                currentClient.setClientId(clientId);
                return clientDetails;
            } // end of loadClientByClientId
        }; // end of inner class

        detailsService.setSelectClientDetailsSql("<query to fetch the client details>");
        return detailsService;
    }

    @Bean
    public JdbcClientTokenServices clientTokenService() {
        return new JdbcClientTokenServices(dataSourceOauth);
    }

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

    @Bean(name = "jdbcTokenStore")
    public TokenStore jdbcTokenStore() {
        return new JdbcTokenStore(dataSourceOauth);
    }

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






@Configuration
@EnableWebSecurity ( debug = true )
@Order(1)
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private ClientDetailsService clientService;

    @Autowired
    private DataSource dataSourceOauth;

    @Autowired
    public void globalUserDetails(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(dataSourceOauth).passwordEncoder(passwordEncoder())
                .usersByUsernameQuery("<user query>")
                .authoritiesByUsernameQuery(<User query>");
    }

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


    @Bean
    @Autowired
    public TokenStoreUserApprovalHandler userApprovalHandler(TokenStore tokenStore) {
        TokenStoreUserApprovalHandler handler = new TokenStoreUserApprovalHandler();
        handler.setTokenStore(tokenStore);
        handler.setRequestFactory(new DefaultOAuth2RequestFactory(clientService));
        handler.setClientDetailsService(clientService);
        return handler;
    }


    @Bean
    @Autowired
    public ApprovalStore approvalStore(TokenStore tokenStore) throws Exception {
        TokenApprovalStore store = new TokenApprovalStore();
        store.setTokenStore(tokenStore);
        return store;
    }


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


    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        http.sessionManagement().disable();
        http.csrf().disable();
        http.headers().cacheControl().disable();
        http.authorizeRequests().antMatchers("/login.jsp").authenticated();
        http.authorizeRequests().and().formLogin().loginPage("/login.jsp")
                .loginProcessingUrl("/j_spring_security_check").usernameParameter("j_username")
                .failureUrl("/InvalidUserNamePassword.jsp").passwordParameter("j_password");
        http.authorizeRequests().and().logout().logoutUrl("/j_spring_security_logout");
    }
}
...