Авторизация на основе ролей через IAM Proxy#

Проблематика#

Приложения часто требуют гибкой ролевой модели доступа, но реализация ролевой авторизации на стороне приложения может быть сложной и подверженной ошибкам. IAM Proxy позволяет централизовать управление ролями и передавать их приложению.

Предусловия#

  1. IAM Proxy настроен для работы с OIDC-провайдером и извлечения ролей из JWT-токена.

  2. Приложение расположено за IAM Proxy и использует его для всех входящих запросов.

  3. IAM Proxy может добавлять HTTP-заголовки с информацией о ролях пользователя.

Последовательность выполнения#

  1. Настройка IAM Proxy для передачи ролей

    • в конфигурации IAM Proxy включите добавление заголовков с ролями из JWT-токена. Например:

      proxy:
        headers:
          add:
            X-User-Roles: "{{ .Claims.resource_access.MyAppClientID.roles | join \",\" }}"
      
  2. Реализация проверки ролей в приложении

    • приложение должно извлекать роли из заголовка X-User-Roles и применять их для доступа к функциональности;

    • пример проверки прав в приложении:

      roles = request.headers.get('X-User-Roles', '').split(',')
      if 'Admin' in roles:
          grant_admin_access()
      else:
          return "Forbidden", 403
      
  3. Тестирование

    • выполните запрос от пользователя с ролью Admin через IAM Proxy. Убедитесь, что приложение предоставляет доступ к административным функциям;

    • повторите тест с пользователем, у которого отсутствует роль Admin. Убедитесь, что доступ запрещен.

Результат#

IAM Proxy централизованно управляет ролевыми правами, передавая их приложению через HTTP-заголовки. Это упрощает реализацию ролевой авторизации в приложении и минимизирует риски ошибок в логике доступа.