У меня есть проект, и я сделал бэкэнд с помощью nodejs. Я сделал модуль регистрации пользователя, и аутентификация генерирует токен! Этот токен нужно будет использовать в других запросах, где пользователь должен войти в систему.
Как лучше всего хранить этот токен на интерфейсе с помощью cakephp 4?
Есть какой-то компонент? Безопасно ли хранить этот токен с помощью сеанса?
Буду признателен, если кто-то поможет проанализировать этот случай.
Это мой метод аутентификации:
public function login()
{
$http = new Client();
if ($this->request->is('post')) {
$response = $http->post(
'http://localhost:8889/api/auth/login',
[
'email' => $this->request->getData("username"),
'password' => $this->request->getData("password"),
]
);
if ($response->getStatusCode() == 401) {
return $this->redirect($this->referer());
}
if ($response->isOk()) {
$json = $response->getJSON();
return $this->redirect(['action' => 'home', 'controller' => 'Pages']);
}
}
}
Возврат 200 содержит accessToken.
🤔 А знаете ли вы, что...
Фреймворк обеспечивает интеграцию с различными системами хранения, включая Redis и Memcached.
Лучший способ сохранить токен — использовать файл cookie HttpOnly.
Согласно Microsoft Developer Network, HttpOnly является дополнительный флаг, включенный в заголовок HTTP-ответа Set-Cookie. С использованием флаг HttpOnly при создании файла cookie помогает снизить риск клиентский скрипт, обращающийся к защищенному файлу cookie (если браузер поддерживает его).
Если вы храните его в LocalStorage/SessionStorage, его можно легко захватить атакой XSS (со стороны Javascript/клиента)
В CakePHP 4 это делается следующим образом:
https://book.cakephp.org/4/en/controllers/request-response.html#creating-cookies
$cookie = new Cookie(
'jwt_token', // name
'token', // value
new DateTime('+1 hour'), // expiration time
'/', // path
'example.com', // domain
true, // secure only?
true // http only -> this is what you need
);