Как происходит авторизация пользователя

«Как происходит авторизация пользователя» — вопрос из категории Безопасность, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go авторизация обычно реализуется через JWT (JSON Web Tokens) или сессии. Пример с JWT:

func loginHandler(w http.ResponseWriter, r *http.Request) {
    // Проверка учетных данных
    if !validCredentials(r) {
        http.Error(w, "Unauthorized", http.StatusUnauthorized)
        return
    }

    // Создание токена
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
        "user": r.FormValue("username"),
        "exp":  time.Now().Add(time.Hour * 24).Unix(),
    })

    tokenString, _ := token.SignedString([]byte("secret-key"))
    w.Write([]byte(tokenString))
}

func protectedHandler(w http.ResponseWriter, r *http.Request) {
    tokenString := r.Header.Get("Authorization")
    token, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
        return []byte("secret-key"), nil
    })

    if err != nil || !token.Valid {
        http.Error(w, "Unauthorized", http.StatusUnauthorized)
        return
    }
    // Доступ разрешен
}

Основные этапы:

  1. Пользователь отправляет учетные данные
  2. Сервер проверяет и генерирует токен
  3. Клиент хранит токен (обычно в cookies/localStorage)
  4. При каждом запросе токен проверяется middleware

Для production важно использовать HTTPS, сложные секретные ключи и обновление токенов.