Як використовувати декілька аутентифікаторів захисту
Дата оновлення перекладу 2023-06-22
Як використовувати декілька аутентифікаторів захисту
Компонент Authenticator захисту дає вам змогу з легкістю використовувати багато різних аутентифікаторів одночасно.
Точкою входу є id сервісу (одного з ваших аутентифікаторів),
метод start()
якого викликається для початку процесу аутентифікації.
Декілька аутентифікаторів зі спільною точкою входу
Іноді ви будете хотіти запропонувати вашим користувачам різні механізми аутентифікації, такі як форма входу в систему та вхід через Facebook, тоді як обидві точки входу будуть перенаправляти користувача на одну й ту саму сторінку входу. Однак, у вашій конфігурації, вам потрібно ясно вказати, яку точку входу ви хочете використовувати.
Ось як може виглядати ваша конфігурація безпеки в дії:
1 2 3 4 5 6 7 8 9 10 11
# app/config/security.yml
security:
# ...
firewalls:
default:
anonymous: ~
guard:
authenticators:
- AppBundle\Security\LoginFormAuthenticator
- AppBundle\Security\FacebookConnectAuthenticator
entry_point: AppBundle\Security\LoginFormAuthenticator
У цьому підході є одне обмеження - вам потрібно використовувати лише одну точку входу.
Декілька аутнетифікаторів з окремими точками входу
Тим не менш, існують випадки застосування, коли у вас є аутентифікатори, які захищають різні частини вашого додатка. Наприклад, у вас є форма входу в систему, яка захищає безпечну частину вашого додатка, вхідну та кінцеву API точки, які захищені API-токенами. Оскільки ви можете конфігурувати лише одну точку входу для кожного брандмауера, рішенням буде розділити конфігурацію на два окремі брандмауери:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# app/config/security.yml
security:
# ...
firewalls:
api:
pattern: ^/api/
guard:
authenticators:
- AppBundle\Security\ApiTokenAuthenticator
default:
anonymous: ~
guard:
authenticators:
- AppBundle\Security\LoginFormAuthenticator
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api, roles: ROLE_API_USER }
- { path: ^/, roles: ROLE_USER }