Пользовательская страница входа в Spring Security 5 с использованием oauth2 возвращает ноль - PullRequest
0 голосов
/ 21 мая 2018

Я разрабатываю пользовательскую страницу входа в систему Spring Security 5, используя oauth2.Поэтому я настроил настройки:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests().antMatchers("/").permitAll()
                .anyRequest().authenticated()
                .and()
                .oauth2Login().loginPage("/login/oauth2").permitAll();
    }

и создание controller с @RequestMapping("/login/oauth2"):

@GetMapping("/")
    public String index() {
        return "index";
    }

    @GetMapping("/login/oauth2")
    public String login(Model model, OAuth2AuthenticationToken authentication) {
        return "login";
    }

Страница login.html представляет собой обычную форму, которая перенаправляет на метод loginот контроллера:

 <h1>Logowanie</h1>
<a>ZALOGUJ</a>
<a class="btn" href="/login/oauth2/code/google">Login</a>

При такой конфигурации OAuth2AuthenticationToken authentication имеет значение null и, следовательно, аутентификация не может быть применена.При конфигурации по умолчанию Spring Security 5 все работает нормально.Пример, на котором я основывался, описан здесь: https://docs.spring.io/spring-security/site/docs/5.0.0.RELEASE/reference/htmlsingle/#oauth2login-advanced-login-page; section 31.1 OAuth 2.0 Login Page.

1 Ответ

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

В моем приложении для работы я должен был создать свою пользовательскую конфигурацию WebMvc:

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/login").setViewName("login");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    }
}

Затем в WebSecurityConfig:

 @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/login").permitAll()
                .anyRequest().authenticated()
                .and().formLogin()
                .loginPage("/login")
                .permitAll()
                .and().csrf().disable()
                .logout().permitAll();
    }

Я думаю, что в этом случае вам не нужны пользовательскиеcontroller.

Я написал в блоге сообщение о тихом обновлении токена в неявном потоке, но там вы найдете полнофункциональное приложение с пользовательской страницей входа:

https://regulargeek.blogspot.com/2018/05/angular-5-springboot-2-oauth2-and.html

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