Categorygithub.com/instinctG/Test-task
module
0.0.0-20241203165044-ee7de06d29e9
Repository: https://github.com/instinctg/test-task.git
Documentation: pkg.go.dev

# README

Test task BackDev

Тестовое задание на позицию Junior Backend Developer

Используемые технологии:

  • Go
  • JWT
  • MongoDB

Задание:

Написать часть сервиса аутентификации.

Два REST маршрута:

  • Первый маршрут выдает пару Access, Refresh токенов для пользователя сидентификатором (GUID) указанным в параметре запроса
  • Второй маршрут выполняет Refresh операцию на пару Access, Refreshтокенов

Требования:

Access токен тип JWT, алгоритм SHA512, хранить в базе строго запрещено.

Refresh токен тип произвольный, формат передачи base64, хранится в базе исключительно в виде bcrypt хеша, должен быть защищен от изменения на стороне клиента и попыток повторного использования.

Access, Refresh токены обоюдно связаны, Refresh операцию для Access токена можно выполнить только тем Refresh токеном который был выдан вместе с ним.

Payload токенов должен содержать сведения об ip адресе клиента, которому он был выдан. В случае, если ip адрес изменился, при рефреш операции нужно послать email warning на почту юзера (для упрощения можно использовать моковые данные).

Результат:

Результат выполнения задания нужно предоставить в виде исходного кода на Github.

Сервер генерирует пару токенов access и refresh и отсылает на клиент. Клиент мониторит состояние access токена по его времени жизни, как только он истек клиент отправляет запрос на обновление ключей. Сервер принимает Refresh токен, проверяет на валидность. Если не находит такого Refresh, то возваращает ошибку, если находит, то обновляет токены и отсылает обратно на клиент.

Чтобы защититься от хакеров refresh токен шифруется и валидируется. Даже если на клиенте данный токен изменят, то он просто не пройдет проверку.

Эндпоинты

Токены:

  • POST /token/guid - создание access и refresh токена
  • PUT refresh/token/guid - обновления access и refresh токенов refresh токеном,который был выдан вместе с access токеном

Примеры ответов API:

Использовал Postman.

POST /token/:guid img_1.png

PUT /refresh/token/:guid img_2.png

# Packages

No description provided by the author