Как добавить куки аутентификации в ответ REST API, используя Spring Security?

Я защищаю свой REST API с помощью Basic-Auth. Я узнал, что для API без сохранения состояния серверная часть должна отправлять куки (с обоими httpOnly и secure флаг) для базовой аутентификации, которая затем будет добавляться к каждому запросу. Вот мои вопросы:

  1. Какое имя должно быть у этого куки?
  2. Как установить cookie?
  3. Как уровень безопасности Spring идентифицирует и извлекает закодированные в Base64 учетные данные из этого файла cookie?

В настоящее время это моя конфигурация безопасности:

@Override
    protected void configure(HttpSecurity http) throws Exception {// @formatter:off 
        http
        .cors()
        .and().authorizeRequests()
        .antMatchers("/signup/**").permitAll()
        .anyRequest().authenticated()
        .and().httpBasic()
        .and().sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and().csrf().disable()
        ;
        // @formatter:off
    }

Поскольку я понятия не имею, как установить cookie для аутентификации, я попробовал это:

@Controller
@RequestMapping("/login")
public class AuthController {

    @GetMapping
    @ResponseStatus(value=HttpStatus.OK)
    public void loginUser( final HttpServletResponse response) {
        response.addCookie(new Cookie("something", "value"));
    }
}

http://localhost:8080/login является URL-адресом, защищенным базовой аутентификацией. Если пользователь предоставляет правильные учетные данные, он отправляет куки-файл аутентификации с ответом

Кроме того, я не знаю, где можно получить пароль для этого текущего пользователя.


ОБНОВЛЕНИЕ: мне удалось добавить куки в ответ, используя ниже:

    @GetMapping
    @ResponseStatus(value=HttpStatus.OK)
    public void loginUser( final HttpServletRequest request ,final HttpServletResponse response) throws UnsupportedEncodingException {          
        setAuthCookieToResonse(request,response);    
    }

    private void setAuthCookieToResonse(final HttpServletRequest request ,final HttpServletResponse response) throws UnsupportedEncodingException {
        String cookieKey = "auth";
        String cookieValue = request.getHeader("Authorization");

        if (cookieValue != null) {
            Cookie cookie = new Cookie(cookieKey, cookieValue);
            cookie.setHttpOnly(true);

            response.addCookie(cookie);
        }
    }

Итак, теперь основная идея такова: с каждым запросом этот куки будет отправляться. Это уменьшает дополнительные затраты на добавление Authorization заголовок интерфейсным приложением.

Теперь единственная оставшаяся часть: так как к каждому запросу будет прикреплен файл cookie авторизации, мне нужно каким-то образом извлечь этот файл cookie из request и передать его BasicAuthenticationFilter таким образом, что Spring-Security может извлечь имя пользователя и пароль из этого файла cookie.

Моя идея: создать фильтр (как показано ниже) и извлечь учетные данные из cookieзатем добавьте Authorization Заголовок из этого куки в request лайк Basic xxxxxxx=,

0 ответов

Другие вопросы по тегам