Back to questions
Junior — Middle
109
Какой подход к аутентификации и авторизации вы бы применили в своей системе?
Answer from AI
sobes.tech AI
Для аутентификации и авторизации в системе на Go я бы применил подход с использованием JWT (JSON Web Tokens). Это позволяет безопасно передавать информацию о пользователе между клиентом и сервером без необходимости хранить сессии на сервере.
Основные шаги:
- При логине пользователь вводит свои данные, сервер проверяет их и генерирует JWT с нужными правами (ролями).
- Токен отправляется клиенту и хранится, например, в HTTP-only cookie или localStorage.
- При последующих запросах клиент отправляет токен в заголовке Authorization: Bearer <token>.
- Сервер валидирует токен и на основе данных в нем принимает решение о доступе.
Пример генерации JWT с использованием библиотеки github.com/dgrijalva/jwt-go:
import (
"time"
"github.com/dgrijalva/jwt-go"
)
func GenerateJWT(userID string, role string) (string, error) {
claims := jwt.MapClaims{}
claims["user_id"] = userID
claims["role"] = role
claims["exp"] = time.Now().Add(time.Hour * 72).Unix()
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return token.SignedString([]byte("your-secret-key"))
}
Такой подход масштабируем, не требует хранения сессий и хорошо подходит для REST API.