Почему cookie не устанавливается в браузере, а в POSTMAN? - PullRequest
0 голосов
/ 12 февраля 2019

Я отправляю запрос GET для обычной проверки подлинности, на который сервер (бэкэнд-API) возвращает (в случае успешной проверки подлинности) файл cookie.Это работает нормально для POSTMAN, но в браузере не устанавливается cookie.

@GetMapping("/login")
@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 {
    logger.debug("Adding cookie after authentication");
    String cookieKey = "auth";
    String cookieValue = request.getHeader("Authorization");

    if (cookieValue != null) {
        Cookie cookie = new Cookie(cookieKey, URLEncoder.encode(cookieValue, "utf-8"));
        cookie.setHttpOnly(true);
        cookie.setDomain("localhost");

        response.addCookie(cookie);
    }
}

Вот мой поток приложений:

  1. Вход в браузер / POSTMAN с использованием обычной аутентификации.Отправьте учетные данные, используя заголовок Authorization Basic xxxxxx==.
  2. Сервер считывает данные проверки подлинности, и, если он правильный, он создает файл cookie с именем auth и отправляет его обратно с ответом (код выше).Для уровня безопасности я использую Spring security.
  3. Для дальнейших запросов этот cookie будет автоматически отправляться с каждым запросом.Теперь мне нужно было взять этот cookie и извлечь из него детали аутентификации.После этого мне пришлось добавить Authorization Basic xxxxxx== к этому запросу (потому что теперь Authorization не отправляется клиентом, отправляются только cookie).Для этого я создал Filter, который будет работать до BasicAuthenticationFilter.class

Spring. Шаг 2 работает для POSTMAN, но не для браузера.В POSTMAN отправленный сервер response содержит Set-Cookie →auth=Basic xxxxxxxx=; Domain=localhost; HttpOnly.

curl -i -u pu@gmail.com:password@ http://localhost:8085/api/v1/login

HTTP/1.1 200
Set-Cookie: auth=Basic xxxxxxxx==; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 0
Date: Tue, 12 Feb 2019 05:59:33 GMT

Заголовок ответа в браузере:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:3007
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Length: 0
Date: Tue, 12 Feb 2019 11:52:10 GMT
Expires: 0
Pragma: no-cache
Vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

Какую дополнительную конфигурацию мне нужно сделать здесь?

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