Я получил следующую реализацию oauth2:
- Мой интерфейс (SPA), написанный на angular2, обслуживается с
frontend.mydomain.com
. - Когда пользователь входит в систему, он подключается к
auth.mydomain.com
, серверная часть отвечает токеном доступа и устанавливает httpOnly cookie, содержащий токен обновления.
Вот как я устанавливаю cookie:
@RequestMapping(path="/retrieve", method = RequestMethod.GET)
public String getToken(HttpServletResponse resp, @RequestParam("username") String username, @RequestParam("password") String password) {
String[] tokens = //retrieve tokens logic, values are not important
Cookie cookie = new Cookie("token", tokens[1]);
resp.addCookie(cookie);
return tokens[2];
}
- Данные извлекаются из
resources.mydomain.com
(запросы отправляются с токеном доступа) - когда токен истекает, я хочу обновить его, отправив запрос на
auth.mydomain.com
- сервер должен получить токен обновления из cookie и ответить новым токеном доступа.
Я думаю, что у меня проблема в пункте 2, который влияет на пункт 4 - cookie не отправляется. org.springframework.web.bind.ServletRequestBindingException: Missing cookie 'token' for method parameter of type Object
Почему? Что я могу сделать, чтобы браузер сохранял и отправлял этот файл cookie?
Когда я заглядываю в свой браузер (инструменты разработчика), я вижу, что ответ на отдых отправляет cookie:
Но в браузере не хранятся файлы cookie:
1 ответ
Проблема была во внешней стороне. Я не использовал опцию withCredentials. Его также следует использовать для запроса, который устанавливает cookie, и для запроса, который отправляет cookie:
Получение cookie:
this.http.get(
AUTHENTICATION_ENDPOINT + "/retrieve?username=" + login + "&password=" + password + "&remember=" + remember,
new RequestOptions({withCredentials: true})
)
Отправка cookie:
this.http.get(
AUTHENTICATION_ENDPOINT + "/refresh",
new RequestOptions({withCredentials: true})
)
Похожие вопросы
Связанные вопросы
Новые вопросы
spring
Spring Framework - это среда с открытым исходным кодом для разработки приложений на платформе Java. В ее основе лежит широкая поддержка компонентно-ориентированных архитектур, и в настоящее время в ней имеется более двадцати высокоинтегрированных модулей.