Uwierzytelnianie wielu zapór symfony2 za pomocą jednego formularza logowania

Mam dwie firewalle:

  1. api (dla wywołań API)
  2. 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?

Author: CSchulz, 2012-01-31

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.
 60
Author: jstephenson,
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