#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 и заголовке авторизации. Но я не знаю, это ли вы имели в виду. Еще раз спасибо и с уважением.