Точка входа: помощь пользователям с началом аутентификации
Дата обновления перевода 2024-07-27
Точка входа: помощь пользователям с началом аутентификации
Когда неаутентифицированный пользователь пытается получить доступ к защищенной странице, Symfony предоставляет ему подходящий ответ, чтобы позволить ему начать аутентификацию (например, перенаправляет на форму входа в систему, или отображает ответ HTTP 401 Неавторизовано, для API).
Однако, иногда, один файерволл имет множество способов аутентификации (к примеру, и форму входа в систему, и социальный вход в систему). В таких случаях необходимо сконфигурировать точку входу аутентификации.
Вы можете сконфигурировать ее, используя настройку entry_point
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# config/packages/security.yaml
security:
enable_authenticator_manager: true
# ...
firewalls:
main:
# позволить аутентификацию, используя форму или пользовательский аутентификатор
form_login: ~
custom_authenticators:
- App\Security\SocialConnectAuthenticator
# сконфигурировать форму аутентификации как точку входа для неаутентифицированных пользователей
entry_point: form_login
Note
Вы также можете создать собственную точку входа аутентификации, создав класс,
реализующий AuthenticationEntryPointInterface.
Затем, вы можете установить entry_point
в сервис-id (например, entry_point: App\Security\CustomEntryPoint
)
Множество аутентификаторов с разными точками входа
Однако, существуют случаи применения, где у вас есть аутентификаторы, которые защищают разные части вашего приложения. Например, у вас есть форма входа в систему, защищающая основной веб-сайт и конечные точки API, используемые внешними сторонами, защищенные ключами API.
Так как вы можете сконфигурировать только по одной точке входа для одного файерволла, решением будет разделить конфигурацию на два отдельных файерволла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# config/packages/security.yaml
security:
# ...
firewalls:
api:
pattern: ^/api/
custom_authenticators:
- App\Security\ApiTokenAuthenticator
main:
lazy: true
form_login: ~
access_control:
- { path: '^/login', roles: PUBLIC_ACCESS }
- { path: '^/api', roles: ROLE_API_USER }
- { path: '^/', roles: ROLE_USER }