Skip to content

Авторизация

  1. Зарегистрируй пользователя в Swagger.

  2. Используй дебаг в твоем golang-приложении, продебажь путь /api/1/auth/login.

  3. Чтобы найти код, пройди в router.

  1. Пройди в метод login.

Все, что касается авторизации, находится в модуле Auth.

  1. Далее перейди в a.auth.AuthorizeEmail. Таким образом ты попадешь в сервис Auth, в котором хранится логика авторизации и аутентификации.

Самостоятельно изучи код в сервисе auth.

JWT (JSON Web Tokens)

В проекте для авторизации используется jwt.

JWT (JSON Web Token) — это формат токенов, которые могут быть использованы для безопасной передачи информации между клиентом и сервером. Токены JWT состоят из трех частей: заголовка, полезной нагрузки (payload) и подписи (signature).

Заголовок (header) — это JSON-объект, который описывает тип токена и используемый алгоритм шифрования. Пример заголовка:

Payload (полезная нагрузка) — это JSON-объект, содержащий данные, которые мы хотим передать с помощью токена. Обычно это информация о пользователе, такая как его идентификатор, роль, дата истечения срока действия токена и т. д. Пример полезной нагрузки:

Подпись (signature) — это результат шифрования заголовка и полезной нагрузки с помощью секретного ключа сервера. Он используется для проверки подлинности токена на стороне сервера. Пример подписи:

Токены JWT используются для аутентификации пользователей в веб-приложениях. Когда пользователь входит в систему, сервер генерирует JWT и отправляет его клиенту. Клиент сохраняет токен в своем хранилище и при каждом запросе к серверу добавляет его в заголовок запроса. Сервер может проверить подлинность токена, используя секретный ключ, и убедиться, что запрос был сделан от имени авторизованного пользователя.

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

В данном коде реализуется работа с JSON Web Token (JWT), который позволяет создавать и верифицировать цифровые подписи с помощью алгоритмов шифрования.

Структура UserClaims представляет пользовательские данные, которые будут включены в токен в формате JSON: это поля ID, Role и Groups.

TokenManager — это интерфейс, который определяет методы создания и разбора токенов.

TokenJWT — это структура, которая реализует интерфейс TokenManager и используется для создания и разбора токенов.

Метод CreateToken используется для создания нового токена с заданными параметрами. Он принимает ID пользователя, его роль, группы, время жизни токена и его тип (access или refresh). Здесь используется библиотека JWT, которая генерирует токен с заданными параметрами. Метод ParseToken используется для разбора входного токена и извлечения пользовательских данных, которые были в него переданы. Здесь происходит проверка подписи и извлечение полей из токена. Если он не действителен, то возвращается ошибка.

Также в коде определены константы AccessToken и RefreshToken, которые используются для определения типа токена.