Каким образом наиболее эффективно и безопасно сохранять access и refresh токены?

Какой наиболее надежный способ хранения access и refresh токенов: хранение в сессиях, локальном хранилище или http only cookie? Разные примеры и подходы вызывают путаницу. Также, я понял, что http only cookie является самым безопасным вариантом из-за ограниченного доступа только у сервера. Вот пример кода для получения и установки cookie.
  • 24 октября 2023 г. 18:08
Ответы на вопрос 2
Для сохранения access и refresh токенов наиболее безопасным и эффективным способом является использование http only cookie. 

Http only cookie хранится только на стороне сервера и не доступна для чтения или изменения с помощью JavaScript. Это делает ее более безопасной, так как предотвращает злоумышленников получение или изменение токенов. Также, использование http  only cookie помогает защитить токены от кросс-сайтового скриптинга (XSS).

Вот пример кода для получения и установки http only cookie:

Получение cookie:

```javascript
const getCookie = (name) => {
  const value = `; ${document.cookie}`;
  const parts = value.split(`; ${name}=`);
  if (parts.length === 2) return parts.pop().split(';').shift();
};

const accessToken = getCookie('access_token');
const refreshToken = getCookie('refresh_token');
```

Установка cookie:

```javascript
const setCookie = (name, value, days) => {
  const date = new Date();
  date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
  const expires = `expires=${date.toUTCString()}`;
  document.cookie = `${name}=${value}; ${expires}; path=/; secure; HttpOnly`;
};

setCookie('access_token', 'your_access_token_here', 7); // установка access token на 7 дней
setCookie('refresh_token', 'your_refresh_token_here', 30); // установка refresh token на 30 дней
```

Обратите внимание, что в приведенном выше коде, устанавливаются значения secure и HttpOnly для обеспечения безопасности cookie. Secure гарантирует, что cookie будут отправляться только через HTTPS, а не обычный HTTP протокол.

Кроме того, чтобы сохранить ваши токены безопасными, убедитесь, что ваш сервер настроен на защищенную передачу данных по протоколу HTTPS. Это поможет предотвратить перехват или изменение токенов злоумышленниками.
1. Разница между различными советами заключается в их плюсах и минусах. Здесь на гитхабе произошло обсуждение, которое включает уже несколько тысяч комментариев.

2. У каждого совета есть свои плюсы и минусы, поэтому не существует "лучшего" совета. Обсуждение на гитхабе набрало уже несколько тысяч комментариев.
Похожие вопросы