Хранение токена доступа Oauth и токенов обновления

avatar
Thorai219
1 июля 2021 в 18:20
163
1
0

В настоящее время я интегрирую некоторые сторонние API, где они используют oauth, и мое приложение представляет собой стек Mern. В настоящее время я реализовал поток oauth только в бэкэнде. Вот пример моего кода.

когда пользователь нажимает кнопку для аутентификации от клиента, я обрабатываю перенаправление с сервера

export const getAuthCode = async (req: Request, res: Response): Promise<void> => {
  res.redirect(OAUTH_URL)
}

когда сторонний API перенаправляет, я анализирую код и запрашиваю доступ и токен обновления

export const getAccessAndRefreshToken = async (req: Request, res: Response): Promise<void> => {
  const { code } = req.query

  try {
    // *options contain client, secret, redirect uri and code*
    const { data } = await axios.post(OAUTH_URL, options)

    console.log(data) // *contains access and refresh tokens*

    // save access and refresh token to httponly cookie
    // redirect user

  } catch (err) {
    console.log(err)
  }
}

вопрос №1 — это правильный способ реализации потока oauth?

вопрос №2 — как хранить токен доступа и обновления? в настоящее время я устанавливаю токены доступа и обновления в файле cookie httpOnly, у меня нет возможности отправить идентификатор пользователя в getAuthCode от клиента, чтобы сохранить токен обновления в пользовательской таблице в базе данных, так как это просто нажатие кнопки.

Источник

Ответы (1)

avatar
Gary Archer
8 июля 2021 в 19:20
1
  1. Поток OAuth выглядит вполне стандартно — постарайтесь также использовать PKCE, если ваш провайдер поддерживает его.

  2. Самый простой вариант — использовать библиотеку и хранить токены в защищенных файлах cookie, а также убедиться, что вы используете такие надежные параметры, как эти:

  • Только HTTP
  • Безопасный
  • Зашифровано AES256 — с симметричным ключом, известным только вашей серверной части
  • SameSite=строгий

Это снижает риски, связанные с браузером, упрощает код вашего приложения и предотвращает накладные расходы и риски, связанные с управлением собственным хранилищем токенов. Лучше оставить этот тип хранилища специализированным системам OAuth.

Однако токены OAuth могут иметь размер в несколько КБ, поэтому вполне возможно, что может потребоваться несколько файлов cookie, чтобы избежать превышения ограничений браузера.