Межсетевые экраны для каждого хоста в Symfony2
Вопрос
Можно ли сопоставить брандмауэры с данным хостом, например, так:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin:
pattern: ^/
host: admin.mysite.com
http_basic:
provider: in_memory
realm: 'MySite Admin'
logout:
main:
pattern: ^/
anonymous: ~
form_login:
provider: fos_userbundle
...
Обратите внимание на поддельный параметр «хост» в брандмауэре администратора.
Возможность ограничить брандмауэры конкретными хостами упростит использование провайдеров для каждого хоста.При работе с разными доменами не нужно беспокоиться о перекрывающихся шаблонах.
Решение
Маршрутизация по хостам была добавлена в версии 2.2, поддержка брандмауэров для каждого хоста была добавлена в версии 2.4.
Сообщение в блоге Фабьена: http://symfony.com/blog/new-in-symfony-2-4-restrict-security-firewalls-to-specified-hosts
Другие советы
По сути, в значительной степени любая схема аутентификации может быть реализована с данной концепцией безопасности. В вашем случае вам, вероятно, нужно определить точку входа, которая также проверяет хост, от которого появляется пользователь. Однако вы должны помнить, что информация «хоста» не обязательно заслуживает доверия и, вероятно, не должна быть вашей единственной мерой аутентификации.
Если вы хотите узнать, как реализовать собственную схему аутентификации, ознакомьтесь с схемой аутентификации формы-логин, уже представленной в платере фреймворка. Хорошим местом для запуска является фабрика безопасности (Symfony Bundle SecurityBundle DevestionInction Security Factory FormLoginFactory), которая обрабатывает динамическую конфигурацию и внедрение всех классов, участвующих в схеме аутентификации. Также проверьте Раздел Symfony Book о безопасности Для высокого уровня вида архитектуры пакета безопасности.