РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
628 of 1361 menu

Middleware firewall

Middleware firewall - это механизм брандмауэра Symfony, который перехватывает каждый HTTP-запрос до вызова контроллера и запускает процесс аутентификации. Брандмауэр определяет, какие маршруты защищены, какие аутентификаторы применяются и как формируется объект Passport. Первым параметром в конфигурации указывается имя брандмауэра, затем - шаблон URL pattern, список authenticators и настройки entry_point.

Синтаксис

security: firewalls: main: pattern: ^/ stateless: false provider: users_in_memory entry_point: App\Security\LoginAuthenticator authenticators: - App\Security\LoginAuthenticator

Пример

Давайте настроим простой брандмауэр для защиты всех маршрутов через пользовательский аутентификатор:

security: providers: users_in_memory: memory: users: user: password: '$2y$13$abcde' roles: ['ROLE_USER'] firewalls: main: pattern: ^/ provider: users_in_memory authenticators: - App\Security\ApiAuthenticator

Пример

Теперь создадим класс аутентификатора, который брандмауэр будет вызывать на каждом запросе:

<?php namespace App\Security; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Http\Authenticator\AbstractAuthenticator; use Symfony\Component\Security\Http\Authenticator\Passport\Passport; use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge; class ApiAuthenticator extends AbstractAuthenticator { public function supports(Request $request): ?bool { return $request->headers->has('X-AUTH-TOKEN'); } public function authenticate(Request $request): Passport { $token = $request->headers->get('X-AUTH-TOKEN'); return new SelfValidatingPassport( new UserBadge($token), [ new CsrfTokenBadge('authenticate', $token), ] ); } public function onAuthenticationSuccess(Request $request, $token, string $firewallName): ?Response { return null; } public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response { return new Response('auth failed', Response::HTTP_UNAUTHORIZED); } } ?>

Пример

Давайте проверим работу брандмауэра через консольную команду, которая выводит список брандмауэров:

php bin/console debug:firewall main

Результат выполнения команды:

"main: pattern=^/ authenticators=App\Security\ApiAuthenticator entry_point=none"

Пример

Давайте настроим несколько брандмауэров для разных разделов сайта:

security: firewalls: api: pattern: ^/api stateless: true authenticators: - App\Security\ApiAuthenticator main: pattern: ^/ provider: users_in_memory form_login: login_path: app_login check_path: app_login

Смотрите также

  • класс Passport,
    который хранит пользователя и бейджи аутентификации
  • класс AbstractAuthenticator,
    который является базой для всех аутентификаторов
  • класс SelfValidatingPassport,
    который подтверждает пользователя без пароля
  • раздел access-control,
    который ограничивает доступ по ролям
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить