Security, Authorization и Authentication (Keycloak)

В этом уроке мы реализуем идентификацию, аутентификацию и авторизацию пользователей в приложении, а также настроим Role Based Access Control (RBAC) - доступ к ресурсам на основе ролей.

Идентификация, аутентификация и авторизация являются критически важными аспектами безопасности в микросервисной архитектуре. Они обеспечивают правильный доступ к ресурсам, контролируя, кто и что может делать в системе. Рассмотрим каждую из этих концепций подробно:

Идентификация

Идентификация - это процесс определения личности пользователя или сервиса. В контексте микросервисной архитектуры это может быть сделано несколькими способами:
  • User ID (Идентификатор пользователя). Каждый пользователь или сервис получает уникальный идентификатор.
  • Tokens (Токены). JSON Web Tokens (JWT) или OAuth2 tokens часто используются для идентификации пользователя или сервиса в распределенной системе.

Аутентификация

Аутентификация - это процесс подтверждения личности пользователя или сервиса, который заявляет о своей идентичности. В микросервисной архитектуре могут быть использованы различные методы аутентификации:
  1. Аутентификация на основе пароля: пользователь вводит имя пользователя и пароль, которые проверяются сервером аутентификации.
  2. OAuth 2.0. Это широко используемый стандарт для аутентификации и авторизации, особенно в сценариях с микросервисами. OAuth 2.0 позволяет приложению (клиенту) получать ограниченный доступ к защищённым ресурсам с помощью токенов доступа.
  3. OpenID Connect. Расширение OAuth 2.0 для аутентификации, которое возвращает информацию о пользователе.
  4. SAML (Security Assertion Markup Language). Используется для обмена аутентификационной и авторизационной информацией между несколькими сторонами.
  5. Multi-factor Authentication (Многофакторная аутентификация). Использование нескольких методов для подтверждения личности, таких как комбинация пароля и одноразового кода (OTP).
В микросервисной архитектуре аутентификация обычно сосредоточена на одном или нескольких центральных сервисах, например, Identity Provider (IdP). Входящие запросы сначала аутентифицируются через IdP, и затем с полученным токеном доступа пользователи могут обращаться к другим микросервисам.

Авторизация

Авторизация - это процесс определения прав и привилегий пользователя или сервиса после их аутентификации. В микросервисной архитектуре авторизация может быть реализована различными способами:
  1. Role-Based Access Control (RBAC): назначение ролей пользователям и определение прав доступа на основе этих ролей.
  2. Attribute-Based Access Control (ABAC): использование атрибутов (например, департамент (отдел, команда) пользователя, его местоположение и т.д.) для определения доступа.
  3. OAuth 2.0 Scopes: определение областей доступа (scopes) для токенов, которые ограничивают доступ к определённым ресурсам.
  4. Policy-Based Access Control (PBAC): использование политик для контроля доступа к ресурсам на основе различных критериев.
В микросервисной архитектуре авторизация может быть распределенной. Каждый микросервис может проверять права доступа на основе токенов, предоставленных клиентом. Также возможно использовать централизованный сервис авторизации, который будет управлять правами доступа.

Технологии, используемые в проекте

В нашем проекте мы будем придерживаться следующего подхода:
  1. В качестве сервера идентификации, аутентификации и авторизации выступит Keycloak.
  2. Аутентификация пользователей будет происходить по протоколу OpenID Connect (OIDC).
  3. Авторизация пользователей будет осуществляться по протоколу OAuth 2.0 с помощью токенов доступа, представленных в формате JWT (Json Web Tokens).

Ошибка приложения

200 OK

Ошибка приложения