Как сохранить токен обновления

Я пытаюсь добавить функцию проверки подлинности в свое приложение. Сервер аутентификации реализует oauth 2.0

Я не уверен, как сохранить refresh_token. Я хочу сохранить его в файл, поэтому в следующий раз, когда приложение запустится и будет доступно refresh_token, он может запросить новый access_token. Пользователю не нужно снова вводить имя повторно.

но это не кажется мне безопасным, потому что, если кто-то копирует мой файл с refresh_token на другой компьютер, он может взломать мою учетную запись.

Ответ 1

Вы правы с атакой, которую вы описываете. Жетоны обновления должны храниться надежно, чтобы их можно было использовать по назначению. Как я понимаю, вы создаете отдельное приложение. Следовательно, вы можете положиться на безопасность файловой системы, чтобы предотвратить копирование маркера обновления неавторизованным пользователем. Возможно, вы захотите использовать шифрование и для маркера обновления, но ключ должен быть привязан к сеансу пользователя на вашем локальном компьютере (в противном случае пользователю потребуется предоставить его во время процесса входа в систему для приложения). расшифровать токен обновления).

Вы можете прочитать ветку из OAuth WG, в которой обсуждаются проблемы, аналогичные описанным, и даются некоторые рекомендации: https://www.ietf.org/mail-archive/web/oauth/current/msg02292.html.

Ответ 2

Для получения доступа используются токены обновления (для этого процесса требуется HTTP Basic Auth). Таким образом, если у пользователя нет вашей (id, secret) комбинации, он не может много сделать. Однако хранение токена обновления должно рассматриваться очень серьезно.

Здесь мои два цента:

  • Сохраните ваши токены в DB

  • Всякий раз, когда вы используете токен обновления, чтобы получить токен доступа reset токен обновления. (У Oauth2.0 есть эта функция, вы можете также оставить токен обновления, но он имеет мудрые точки зрения безопасности, чтобы он менял и обновлял БД)

Надеюсь, это даст некоторые идеи!

Ответ 3

Вы правы в своей заботе - вы не должны сохранять токен обновления. Поступая таким образом, вы ставите под угрозу данные своего клиента (и вы знаете причину, вы написали это в вопросе). oAuth не должен работать таким образом. Вы должны сохранить токен обновления в памяти.