Spring Boot Security OAuth2 с формой входа

Я следуюЧасть V. Начало работы с Spring Boot Security чтобы защитить мои RESTful микросервисы.

Простой поток, который я намереваюсь реализовать:

Если не прошедший проверку подлинности, пользователь перенаправляется на пользовательскую страницу входа в систему, например, «/ login».

Пользователь предоставляет свои учетные данные.

При успешной аутентификации пользователь перенаправляется на домашнюю страницу ('/ home'). Я должен иметь возможность доступа к моей конечной точке REST (за прокси-сервером Zuul) после предоставления токена доступа в запросе.

В руководстве «Приступая к работе» по вышеупомянутой ссылке используются Basic Auth и фиктивный пользователь, настроенный в файле .properties или .yml.

Вот как я пытался с моей конфигурацией: -

@Configuration
@EnableAuthorizationServer
public class OAuth2Config extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory().withClient("acme").secret("acmesecret")
                .authorizedGrantTypes("authorization_code", "refresh_token", "password").scopes("openid")
                .accessTokenValiditySeconds(3600);
    }

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

}



@Configuration
@Import({ OptoSoftSecurityServiceConfig.class })
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService; // backed by MongoDB

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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.httpBasic().disable().formLogin();// disabled basic auth and configured to use dafault Spring Security form login.
    }
}

Ударконечная точка авторизации перенаправляет меня кHTTP: // локальный: 9999 / UAA / Войти'с сообщением об ошибке как: -

<oauth>
<error_description>
Full authentication is required to access this resource
</error_description>
<error>unauthorized</error>
</oauth>

ПРОБЛЕМА

Как я могу настроить Сервер авторизации на использование UserDetailsService вместо статического пользователя и использование формы входа вместо обычной аутентификации.

Как настроить автоматическое утверждение, используя код авторизации в качестве типа предоставления?

Обязательно ли для / oauth / authorize конечная точка защищаться базовой аутентификацией? Почему для доступа к конечной точке / oauth / authorize требуется «Полная аутентификация». Я считаю, что мы не знаем, кто является пользователем до этой конечной точки. Пользователь может быть идентифицирован только после того, как он был аутентифицирован, используя действительные учетные данные, которые приходят после входа в форму.

Ответы на вопрос(1)

Ваш ответ на вопрос