Ответ
В 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
}
// Доступ разрешен
}
Основные этапы:
- Пользователь отправляет учетные данные
- Сервер проверяет и генерирует токен
- Клиент хранит токен (обычно в cookies/localStorage)
- При каждом запросе токен проверяется middleware
Для production важно использовать HTTPS, сложные секретные ключи и обновление токенов.