Точка входу: допомога користувачам з початком аутентифікації

Дата оновлення перекладу 2022-11-26

Точка входу: допомога користувачам з початком аутентифікації

Коли неаутентифікований користувач намагається отримати доступ до захищеної сторінки, Symfony надає йому належну відповідь, щоб дозволити йому почати аутентифікацію (наприклад, перенаправдяє на форму входу у систему або відображає відповідь HTTP 401 Неавторизовано, для API).

Однак, інодні, один брандмауер має багато способів аутентифікації (наприклад, і форму входу у систему, і соціальний вхід у систему). У таких випадках необхідно сконфігурувати точку входу аутентифікації.

Ви можете сконфігурувати її, використовуючи налаштування entry_point:

  • YAML
  • XML
  • PHP
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.

Так як ви можете сконфігурувати лише по одній точці входу для одного брандмауера, рішенням буде розділити конфігурацію на два окремих брандмауери:

  • YAML
  • XML
  • PHP
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 }