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 требуется «Полная аутентификация». Я считаю, что мы не знаем, кто является пользователем до этой конечной точки. Пользователь может быть идентифицирован только после того, как он был аутентифицирован, используя действительные учетные данные, которые приходят после входа в форму.