Ответ
Это два фундаментальных, но разных понятия в безопасности систем.
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)
})
}