Как улучшить токен доступа JWT и обновить токен на основе аутентификации по протоколу Oauth2?

#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. Посмотрите это видео . Как вы можете видеть, часто возникают различные проблемы в зависимости от типа клиента.