Autenticar múltiples firewalls de symfony2 con un formulario de inicio de sesión


Tengo dos firewalls:

  1. api (para llamadas API)
  2. main (para todo lo demás)

Mi inicio de sesión en la aplicación cliente se realiza a través del firewall main. Sin embargo, interactúa con endpoints bajo el firewall api para obtener datos. El problema aquí es que no quiero forzar al usuario a iniciar sesión por segunda vez para autenticarse contra el segundo firewall.

¿Cómo puedo autenticarme contra ambos firewalls con un solo formulario de inicio de sesión?

Author: CSchulz, 2012-01-31

1 answers

Tal vez podría probar la propiedad 'context' firewall.

Digamos que tienes una configuración como esta (que presumiblemente tienes):

security:
    // providers etc ...

    firewall:
        main:
            pattern: # ...
            provider: my_users
            http_basic: ~
        api:
            pattern: # ...
            provider: my_users
            http_basic: ~

En este caso, la sesión del usuario contendrá una propiedad '_security_main' después de autenticarse contra el firewall 'principal', y luego cuando intenten acceder a una ubicación 'api' se les pedirá que vuelvan a autorizar y luego obtendrán una propiedad de sesión '_security_api'.

Para evitar este re-prompt, puede agregar el 'contexto' propiedad de cada definición de firewall que desea compartir la misma autenticación-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

En este caso, tras la autenticación con el firewall 'principal', se establecerá una propiedad '_security_primary_auth' en la sesión del usuario. Cualquier solicitud posterior dentro de la' api 'firewill usará el valor de '_security_primary_auth' para establecer el estado de autenticación (y así el usuario aparecerá autenticado).

Por supuesto, este intercambio de contexto de autenticación funcionará en ambos sentidos alrededor (ya sea que se autoricen primero con el firewall' principal 'o el' api') - si solo quisieras transitoriedad en una dirección, las cosas serían más complejas.

Espero que esto ayude.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-23 08:59:57