Я пытаюсь создать сервер авторизации, используя Spring Security, который в основном будет использоваться для защиты SPA, но также должен поддерживать аутентификацию и авторизацию мобильных приложений через API отдыха.
С этим я пытаюсь защитить SPAс неявным предоставлением oauth2 (позднее планируется изменить его на предоставление кода авторизации с помощью PKCE).Мне нужно, чтобы моя аутентификация работала как запрос на отдых вместо отправки формы, как в
POST {username: test, password: test}
Я реализовал пользовательский фильтр аутентификации, расширив AbstractAuthenticationProcessingFilter, т.е.используйте приведенный ниже блок кода для установки объекта аутентификации в контекст безопасности
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
throws AuthenticationException {
try {
UserCredentials creds = new ObjectMapper().readValue(request.getInputStream(), UserCredentials.class);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
creds.getUsername(), creds.getPassword(), Collections.emptyList());
Authentication authentication = super.getAuthenticationManager().authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
return authentication;
} catch (JsonParseException e) {
throw new BadAuthenticationRequestException("Error while parsing request", e);
} catch (JsonMappingException e) {
throw new BadAuthenticationRequestException("Error while mapping request", e);
} catch (IOException e) {
throw new BadAuthenticationRequestException("Error while reading request", e);
}
}
Когда я нажимаю на этот запрос от почтальона (я тестирую весь поток с почтальоном)
POST {username: test, password:test}
во втором запросе, когда я пытаюсь увидеть аутентифицированного участника, объект аутентификации, похоже, не находится в контексте безопасности.
Кто-нибудь реализовал пользовательскую аутентификацию с запросом, отправленным в формате JSON, с последующей авторизацией oauth2 с токенами JWT?Любые указатели или примеры конфигурации для достижения этой цели?Спасибо