Что такое авторизация в информационной безопасности?

Ответ

Авторизация — это процесс проверки прав доступа аутентифицированного пользователя (или системы) к выполнению определённого действия или получению доступа к конкретному ресурсу.

Ключевое отличие от аутентификации:

  • Аутентификация: "Кто ты?" (проверка личности, например, по логину/паролю).
  • Авторизация: "Что тебе разрешено делать?" (проверка прав).

Основные модели авторизации:

  1. Ролевой доступ (RBAC — Role-Based Access Control): Права назначаются ролям, а пользователям присваиваются роли.

    // Пример с аннотациями Spring Security
    @PreAuthorize("hasRole('ADMIN')")
    public void deleteUser(Long userId) { /* ... */ }
  2. Детальный доступ на основе прав/атрибутов (ABAC — Attribute-Based Access Control): Решение принимается на основе атрибутов пользователя, ресурса, действия и контекста (время, местоположение). Более гибкая модель.

  3. Мандатный доступ (MAC): Используется в системах с высокими требованиями к безопасности, где права назначаются централизованно.

Пример реализации проверки прав в коде:

// Проверка, является ли пользователь владельцем ресурса
@PreAuthorize("#userId == authentication.principal.id or hasRole('MODERATOR')")
public User updateUserProfile(Long userId, UserProfileDto profile) {
    // Обновить профиль пользователя
}

Технологии и протоколы:

  • OAuth 2.0 / OpenID Connect: Стандарты для делегированного доступа и аутентификации, часто используемые в веб-API и микросервисах.
  • JWT (JSON Web Tokens): Токены, которые могут содержать claims (утверждения) о правах пользователя, проверяемые ресурсным сервером.
  • Spring Security, Apache Shiro: Фреймворки для реализации авторизации в Java-приложениях.

Авторизация — критический компонент безопасности, который следует принципу минимальных привилегий: пользователь должен получать ровно те права, которые необходимы для выполнения его задач.

Ответ 18+ 🔞

Давай разжую тебе эту тему про авторизацию, а то смотрю, глаза стекленеют, как у совы нахуй в свете фар.

Представь, что ты врываешься в банк. Первый чувак на входе — это аутентификация. Он тебя останавливает и орёт: «Стой, блядь! Кто такой? Паспорт давай!». Ты показываешь лицо, отпечаток пальца, пароль от маминой кредитки — и он такой: «А, ну Василий, проходи». Это ответ на вопрос «Кто ты?».

А вот внутри, у сейфа, стоит уже другой мужик, здоровенный, с дубиной. Это — авторизация. Ты к нему: «Вась, открой сейф, я деньги забрать». А он тебя так оценивающе с ног до головы и спрашивает: «А тебе, собственно, что можно-то?». Проверяет твои права. Может, тебе только в кассу с вкладами можно, а в хранилище с золотыми слитками — ни-ни, хоть ты тресни. Вот это и есть разница, ёпта.

Основные загоны, по которым этот охранник у сейфа права проверяет:

  1. Ролевой доступ (RBAC). Самый простой, как в армии. Есть роли: «рядовой», «сержант», «генерал». Тебе выдали жетон «рядовой» — иди мети плац, блядь. А чтобы танком покомандовать — ни хуя. В коде это выглядит примерно так, если по-простому:
// Пример с аннотациями Spring Security
@PreAuthorize("hasRole('ADMIN')") // Стой, бля! Только для админов!
public void deleteUser(Long userId) { /* ... */ } // Удалить юзера — это святое
  1. Детальный доступ на основе атрибутов (ABAC). А вот это уже похитрее. Тут охранник смотрит на кучу всего: кто ты, что за сейф, который час и не из офиса ли ты звонишь. «Ага, — говорит, — ты Василий, хочешь доступ к отчетам за 2023 год, и сейчас рабочий день. Ну ладно, проходи». Гибко, но мозги можно сломать, пока настроишь.

  2. Мандатный доступ (MAC). Это уже для параноиков уровня «ядерные коды». Тут права не обсуждаются — они спущены свыше, от самого главного генерала. Ты, рядовой, даже не рыпайся — тебе в ту сторону ходить нельзя, и точка. Используется там, где секретность выше крыши.

А вот реальный пример из жизни, как это в коде вмазывают:

// Проверка, является ли пользователь владельцем ресурса
@PreAuthorize("#userId == authentication.principal.id or hasRole('MODERATOR')")
public User updateUserProfile(Long userId, UserProfileDto profile) {
    // Обновить профиль пользователя
}

Перевожу с программистского на русский: «Обновить профиль может либо сам пользователь (если его id совпадает с userId в запросе), либо модератор, если пользователь — мудак конченый и сам свой аватар на похабную картинку поменял».

Из чего это всё обычно собирают, чтобы не изобретать велосипед:

  • OAuth 2.0 / OpenID Connect. Эта хуйня, когда ты заходишь на сайт через «Войти через Гугл/Фейсбук». Ты даёшь тому сайту не пароль, а временный пропуск (токен) с написанными правами: «Васе разрешено только читать его почту, но не удалять».
  • JWT (JSON Web Tokens). Это и есть тот самый «пропуск», бумажка с печатью. Внутри неё написано, кто ты и что тебе можно. Сервер может её проверить, даже не спрашивая у главного штаба — умная штука.
  • Spring Security, Apache Shiro. Это уже готовые банды охранников-профессионалов. Ты их нанимаешь в свой проект, говоришь: «Вот правила», а они сами всех проверяют, не пускают и в морду дают, если что.

И главный принцип во всём этом бардаке — принцип минимальных привилегий. Это как в армии: не давай рядовому доступ к складу с оружием, а то он, сука, начнёт раздавать гранаты направо и налево. Дай ровно столько прав, сколько нужно для дела, и ни капли больше. А то будет пиздец, а не безопасность.