Uwierzytelnianie wielu zapór symfony2 za pomocą jednego formularza logowania
Mam dwie firewalle:
-
api
(dla wywołań API) -
main
(za wszystko inne)
Moje logowanie do aplikacji klienta odbywa się przez firewall main
. Jednakże, w celu pobrania danych wchodzi w interakcję z punktami końcowymi pod firewallem api
. Problem polega na tym, że nie chcę zmuszać użytkownika do zalogowania się po raz drugi w celu uwierzytelnienia za pomocą drugiego Firewalla.
Jak mogę uwierzytelnić obie zapory za pomocą jednego formularza logowania?
1 answers
Być może mógłbyś wypróbować właściwość' context ' firewall.
Powiedzmy, że masz taką konfigurację (co zapewne robisz):
security:
// providers etc ...
firewall:
main:
pattern: # ...
provider: my_users
http_basic: ~
api:
pattern: # ...
provider: my_users
http_basic: ~
W tym przypadku sesja użytkownika będzie zawierać właściwość ' _security_main 'po uwierzytelnieniu z zaporą' main', a następnie, gdy spróbuje uzyskać dostęp do lokalizacji 'api', zostanie poproszony o ponowne auth, a następnie uzyska właściwość sesji '_security_api'.
Aby zapobiec ponownemu monitowi, możesz dodać 'kontekst' właściwość do każdej definicji zapory sieciowej, którą chcesz udostępnić to samo uwierzytelnianie-so:
security:
# providers etc ...
firewall:
main:
pattern: # ...
provider: my_users
http_basic: ~
context: primary_auth # new
api:
pattern: # ...
provider: my_users
http_basic: ~
context: primary_auth # new
W tym przypadku, po uwierzytelnieniu z' main 'firewall, właściwość' _security_primary_auth ' zostanie ustawiona w sesji użytkownika. Wszelkie kolejne żądania wewnątrz' api 'Fire będą następnie używać wartości '_security_primary_auth' do ustalenia statusu uwierzytelniania(a więc użytkownik będzie się uwierzytelniać).
Oczywiście to uwierzytelnianie współdzielenie kontekstu będzie działać w obie strony wokół (niezależnie od tego, czy najpierw auth z' main 'czy' api ' firewall) - gdybyś chciał tylko przemijanie w jednym kierunku, sprawy byłyby bardziej złożone.
Mam nadzieję, że to pomoże.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-23 08:59:57