#authentication #oauth-2.0 #jwt #access-token #refresh-token
Вопрос:
Я построил одну аутентификацию с использованием токена доступа, токена обновления и ротации токенов обновления. При входе пользователя в систему система генерирует один токен JWT и один хэшированный токен обновления UUID, а затем его идентификатор токена обновления возвращается пользователю.
Токен обновления инициализации-это токен UUID, который используется bcrypt
для хэширования токена uuid, а затем сохранения в базе данных. В базе данных, помимо сохранения идентификатора токена обновления и хэшированного токена, я также сохранил дату истечения срока его действия, идентификатор пользователя, активный статус и отозванный ip-адрес.
Маркер доступа передается внутри Authentication
заголовка в качестве Bearer
маркера для проверки JWT. Когда срок действия одного токена доступа истек, он вызывает /refresh-token
старое значение токена обновления и его идентификатор, чтобы получить новую пару токенов доступа и обновления. Если срок действия токена обновления истек, я попрошу пользователя снова войти в систему.
У меня также есть метод ротации токенов обновления, чтобы избежать повторного использования токенов обновления. Когда токен обновления используется повторно, я отменяю и отключаю все токены обновления, принадлежащие этому семейству идентификаторов пользователей. Таким образом, пользователь должен снова войти в систему, чтобы получить новый токен доступа и обновить пару токенов.
Я знаю OAuth2
, что это хороший протокол для реализации аутентификации токена доступа и обновления токена. С моим дизайном аутентификации, как его улучшить, чтобы сделать это с OAuth2
помощью ?
Ответ №1:
Ну, похоже, что ваш UUID обладает всеми полномочиями токена обновления для клиента. И если клиент является браузером, он никогда не должен получать токен обновления — безопасный файл cookie считается лучшим.
Основные вещи, которые я бы рекомендовал, — это использовать сервер авторизации и следовать стандартным рекомендациям в отношении API, веб-приложений и мобильных приложений.
OAuth предоставляет ряд шаблонов проектирования безопасности. Стоит разобраться в специфике веб-и мобильных клиентов. Также подумайте о функциях, связанных с безопасностью, таких как аудит выпущенных токенов.
Вот некоторые ресурсы из Curity, где я работаю. Концепции здесь применимы к любому поставщику услуг — важны принципы:
Комментарии:
1. Привет, почему файл cookie более безопасен, чем тело ответа на токен обновления?
2. Маркеры обновления в теле ответа подходят, если клиент может безопасно хранить их, но браузер не может. В 2021 году существуют опасения по поводу XSS в браузере, и предпочтение отдается последним
SameSite=strict
файлам cookie. Посмотрите это видео . Как вы можете видеть, часто возникают различные проблемы в зависимости от типа клиента.