Как управлять JWT, когда файлы cookie отключены

#javascript #java #json #rest #cookies

#javascript #java #json #остальное #файлы cookie

Вопрос:

Я читал статьи о веб-токене JSON (который для меня совершенно новый) и его безопасном механизме передачи информации между сторонами, чтобы избежать сеансов сервера.

Я создаю веб-приложение с нуля, используя Java, Tomcat, Jersey framework для веб-сервисов и JOSE4J для JWT.

Во многих статьях рекомендуется использовать файлы cookie HttpOnly вместо localStorage

Я уже создал подобный метод restful с файлом cookie и jwt

 @GET
@Path("/authenticate")
@Produces(MediaType.APPLICATION_JSON)
public Response authenticate(
        @HeaderParam("username") String username,
        @HeaderParam("password") String password) throws JSONException,
        IOException, JoseException {
        Service service = Service.getInstance();
        EmployeeProfile employeeProfile = service.authenticate(username, password);
        // Temporarily httponly and secure as false to test
        NewCookie cookie = new NewCookie("jwt", service.getToken(), null, null, null, 900, false, false);
        return Response.status(200).cookie(cookie).entity(employeeProfile).build();
    }
    return Response.status(204).entity(null).build();
}
  

Когда я запускаю свое веб-приложение в Chrome, я вижу, что файл cookie был сохранен правильно.

Теперь я могу использовать этот токен для вызова дальнейших методов restful без необходимости повторной аутентификации, но что, если файлы cookie отключены? Я не могу получить файл cookie, поскольку я тестировал в режиме инкогнито. В этом случае я могу проверить, включены ли файлы cookie, и предупредить пользователя включить их, чтобы продолжить процесс входа в систему.

Чтобы проверить файлы cookie, я делаю это:

 $.cookie('test_cookie', 'cookie_value', { path: '/' });
if ($.cookie('test_cookie') !== 'cookie_value') {
    //Cookies are disabled. Show a modal.
}
  

Но это очень ограничительно. Поэтому мне интересно, какова была бы моя альтернатива для извлечения jwt с сервера? Я не очень уверен в этом, но должен ли я изменить контроллер, чтобы отправлять jwt как часть ответа в json и сохранять его в localStorage, даже если это может подвергнуть мой токен атакам XSS? Однако использование файлов cookie также может быть подвержено атакам CRSF, но не в том случае, если я установлю для свойств HttpOnly и secure значение true, но в этом случае я не смогу прочитать файл cookie с помощью javascript. Я в замешательстве по этому поводу.

Заранее благодарю.

Комментарии:

1. Просто используйте localStorage. Если вы беспокоитесь о XSS-атаках, используйте iframes для кода JavaScript, которому вы не доверяете.

Ответ №1:

Вы правы, вам нужно сменить свой контроллер и отправить JWT является частью ответа, а также файлы cookie с флагом HttpOnly из-за ценных бумаг, но вопрос в том, расшифровывает ли JWT на стороне клиента и использует какое-то значение оттуда. если «Нет», то нет необходимости отправлять JWT как часть ответа .. если «Да», лучше удалить все эти значения из токена и отправить отдельный объект json в заголовке ответа.

Комментарии:

1. Спасибо за ваш ответ. Это все еще немного сбивает с толку, потому что это ново для меня. Вы имеете в виду отправить JWT через ответ в заголовке как HttpOnly? Я проведу проверку JWT на стороне сервера. Я просто хочу получить JWT от аутентификации и сохранить его для следующих вызовов. Я точно не знаю, где хранить JWT. Можете ли вы привести простой пример, чтобы лучше понять ваш ответ, или хорошую ссылку для чтения? Я читаю блог о JWT и заголовке авторизации. Но я не знаю, это ли вы имели в виду. Еще раз спасибо и с уважением.