Что такое авторизация и чем она отличается от аутентификации?

Ответ

Это два фундаментальных, но разных понятия в безопасности систем.

1. Аутентификация (Authentication) — «Кто вы?»

Это процесс проверки личности пользователя. Система удостоверяется, что пользователь является тем, за кого себя выдаёт. Обычно это происходит через:

  • Логин и пароль.
  • Биометрические данные (отпечаток пальца, лицо).
  • Одноразовые коды (OTP).
  • Ключи или сертификаты.

2. Авторизация (Authorization) — «Что вам можно делать?»

Это процесс предоставления или проверки прав доступа к определённым ресурсам или действиям. Авторизация происходит после успешной аутентификации.

Она определяет, может ли аутентифицированный пользователь:

  • Читать данные (GET).
  • Создавать новые записи (POST).
  • Изменять существующие (PUT/PATCH).
  • Удалять информацию (DELETE).

Ключевое различие:

  • Аутентификация — это пропуск в здание.
  • Авторизация — это ключ от конкретного кабинета внутри этого здания.

Пример middleware для авторизации в Go:

Этот middleware проверяет, есть ли у пользователя права администратора (например, на основе данных из JWT-токена), прежде чем предоставить доступ к защищённому обработчику.

func AdminOnlyMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Предполагается, что информация о пользователе и его роли
        // была извлечена из токена на предыдущем шаге (в middleware аутентификации)
        // и добавлена в контекст запроса.
        role := r.Context().Value("userRole").(string)

        if role != "admin" {
            http.Error(w, "Forbidden: Admins only", http.StatusForbidden)
            return
        }

        // Если проверка пройдена, передаём управление дальше
        next.ServeHTTP(w, r)
    })
}