J'ai une application Symfony 3.2 qui expose une API REST et utilise Json Web Tokens (JWT) pour l'authentification. J'ai récemment passé à l'utilisation du composant Guard de Symfony. Maintenant, mon security.yml
contient une section de configuration de pare-feu comme suit (j'utilise le faisceau Lexik JWT 2.4.0, mais cela ne devrait pas d'importance):Pourquoi Symfony Guard déclenche-t-il l'événement 'security.interactive_login' à chaque requête?
firewalls:
# ...
api:
pattern: ^/api
stateless: true
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
Depuis que je l'ai fait ce commutateur, je remarque que tous les La requête est traitée comme si l'utilisateur venait de se connecter, c'est-à-dire qu'un événement security.interactive_login
est déclenché. Dans les docs (http://symfony.com/doc/current/components/security/authentication.html#authentication-events) il est écrit:
L'événement security.interactive_login est déclenché après un utilisateur connecté activement dans votre site web. Il est important de distinguer cette action de méthodes d'authentification non interactives, telles que: authentification basée sur un cookie "remember me", authentification basée sur votre session, authentification utilisant un en-tête HTTP ou un condensé HTTP. Vous pouvez écouter l'événement security.interactive_login, par exemple, dans afin de donner à votre utilisateur un message flash bienvenue chaque fois qu'ils se connectent
Je ne doute pas attendre cet événement pour chaque demande. - Je préfère attendre l'événement security.authentication.success
à chaque demande, comme indiqué dans les documents.
Cependant, Symfony envoie la classe de GuardAuthenticatorHandler
l'événement security.interactive_login
dans sa méthode authenticateWithToken
, et cette méthode est appelée par le GuardAuthenticationListener
à chaque demande. Est-ce un bug dans Symfony, un malentendu de mon côté ou une configuration incorrecte?
(Ce n'est pas une question philosophique -. Dans mon cas, il conduit au problème concret que la dernière fois de connexion de l'utilisateur est mis à jour à chaque demande, qui n'a pas de sens)
Pouvez-vous expliquer pourquoi? Pour moi, il semble que les requêtes authentifiées JWT sont utilisées pour avoir une conversation sans état. – LBA
Ceci est expliqué ici http://symfony.com/doc/current/security/api_key_authentication.html#storing-authentication-in-the-session si vous définissez true sans état alors vous ne stockez pas l'authentification dans la session et vous sont censés authentifier chaque fois. – ste