2017-05-24 1 views
3

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)

Répondre

0

Vous devez modifier ce

 stateless: false 
+0

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

+0

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