Авторизация
-
Зарегистрируй пользователя в Swagger.
-
Используй дебаг в твоем golang-приложении, продебажь путь /api/1/auth/login.
-
Чтобы найти код, пройди в router.
- Пройди в метод login.
Все, что касается авторизации, находится в модуле Auth.
- Далее перейди в 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, которые используются для определения типа токена.