После использования пользовательской формы входа сервер OAuth2 не перенаправляется на клиентский сервер - PullRequest
0 голосов
/ 21 мая 2018

Аутентификация и авторизация работает нормально.Но после успешного входа в систему он не перенаправлял меня на клиентскую сторону, далее открывал исходный код некоторого файла .js.В то время как предыдущий (без пользовательской формы входа в систему loginPage ("/ login")) он успешно перенаправил меня на последнюю нажатую страницу (на стороне клиента), которая требовала аутентификации.

Мой код на стороне сервера, как показано ниже:

Сервер авторизации

@ Конфигурация

@ EnableAuthorizationServer

открытый класс AuthorizationServerConfig расширяет AuthorizationServerConfigurerAdapter {

@Autowired
private AuthenticationManager authenticationManager;

@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {

    security.tokenKeyAccess("permitAll()")
            .checkTokenAccess("isAuthenticated()");
}


@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients
            .inMemory()
            .withClient("ClientId")
            .secret("secret")
            .authorizedGrantTypes("authorization_code")
            .scopes("user_info")
            .redirectUris("http://localhost:8082/ui/login")
            .autoApprove(true);
}


@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {

    endpoints.authenticationManager(authenticationManager);
}

}

Сервер ресурсов

@ Конфигурация

@ EnableResourceServer

открытый класс ResourceServer extends ResourceServerConfigurerAdapter {

@Override
public void configure(HttpSecurity http) throws Exception {
    http.requestMatchers().antMatchers("/api/**").and().authorizeRequests()
            .antMatchers("/api/**").authenticated().and()
            .antMatcher("/rest/hello/principal")
            .authorizeRequests().anyRequest().authenticated();
}

My Security Config

@ Configuration

открытый класс WebSecurityConfiguration расширяет WebSecurityConfigurerAdapter {

@Autowired
private CustomUserDetailsService userDetailsService;

@Override
protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests().antMatchers("/login").permitAll().antMatchers("/oauth/token/revokeById/**").permitAll()
        .antMatchers("/tokens/**").permitAll().anyRequest().authenticated().and()
        .formLogin().loginPage("/login")
        .usernameParameter("username")
        .passwordParameter("password")
        .failureUrl("/login?error")
        .defaultSuccessUrl("/").permitAll().and()
        .csrf().disable();

}

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

@Bean(name = "passwordEncoder")
public PasswordEncoder passwordencoder() {
    return new CustomPasswordEncoder();
}

}

1 Ответ

0 голосов
/ 21 мая 2018

вам нужно создать реализацию SimpleUrlAuthenticationSuccessHandler

public class RefererRedirectionAuthenticationSuccessHandler 
  extends SimpleUrlAuthenticationSuccessHandler
  implements AuthenticationSuccessHandler {

    public RefererRedirectionAuthenticationSuccessHandler() {
        super();
        setUseReferer(true);
    }

}

и добавить одну строку в WebSecurityConfiguration .successHandler (new RefererAuthenticationSuccessHandler ())

И после этого ваш метод будет выглядеть, как показано ниже

@Override
protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests().antMatchers("/login").permitAll().antMatchers("/oauth/token/revokeById/**").permitAll()
        .antMatchers("/tokens/**").permitAll().anyRequest().authenticated().and()
        .formLogin().loginPage("/login")
        .usernameParameter("username")
        .passwordParameter("password")
        .successHandler(new RefererAuthenticationSuccessHandler()) 
        .failureUrl("/login?error")
        .defaultSuccessUrl("/").permitAll().and()
        .csrf().disable();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...