2017-05-24 1 views
3

나는 REST API를 공개하고 인증을 위해 Json Web Token (JWT)을 사용하는 Symfony 3.2 애플리케이션을 가지고있다. 나는 최근 Symfony의 Guard 구성 요소를 사용하도록 전환했습니다. 이제 다음과 같이 내 security.yml 방화벽 설정 섹션을 포함 (I가 Lexik JWT 번들 2.4.0를 사용하고 있지만,이 문제가되지해야한다) :이 스위치를 한 이후Symfony Guard가 모든 요청에 ​​'security.interactive_login'이벤트를 발생시키는 이유는 무엇입니까?

firewalls: 
    # ... 
    api: 
     pattern: ^/api 
     stateless: true 
     guard: 
      authenticators: 
       - lexik_jwt_authentication.jwt_token_authenticator 

, 나는 알 모든 그 요청은 사용자가 방금 로그인 한 것처럼 처리됩니다. 즉 security.interactive_login 이벤트가 발생합니다. 워드 프로세서에서 은 (http://symfony.com/doc/current/components/security/authentication.html#authentication-events는) 그 상태 : 사용자가 웹 사이트에 적극적으로 를 로그인 한 후

security.interactive_login 이벤트가 트리거됩니다. 이 동작을 비대화 형 인증 방법 (예 :쿠키, 세션을 기준으로 인증, HTTP 기본 또는 HTTP 다이제스트 헤더를 사용하여 인증)를 기반으로하는 인증과 구별하는 것이 중요합니다. 당신은에 환영 플래시 메시지를 사용자가 로그인 할 때마다 제공하는 위해, 예를 들어, security.interactive_login 이벤트를들을 수

그래서 나는 확실히 모든 요청에 ​​대해이 이벤트를 기대하지 않습니다. - 차라리 모든 요청에 ​​대해 security.authentication.success 이벤트를 얻으려고합니다. 그러나

, 심포니의 GuardAuthenticatorHandler 클래스는 authenticateWithToken 방법에 security.interactive_login 이벤트를 전달하고,이 방법은 모든 요청에 ​​ GuardAuthenticationListener에 의해 호출됩니다. Symfony의 버그입니까, 제 편에 대한 오해입니까, 아니면 잘못된 구성 때문입니까?

(이것은 철학적 질문하지 않습니다 -. 내 경우는 사용자의 마지막 로그인 시간이 이해가되지 않는 모든 요청에 ​​업데이트되는 구체적인 문제로 연결) 본을 변경해야합니다

답변

0

 stateless: false 
+0

이유를 자세히 설명해 주실 수 있습니까? 나에게 JWT 인증 요청은 상태없는 대화를하는 데 사용되는 것처럼 들린다. – LBA

+0

여기에 설명되어 있습니다. http://symfony.com/doc/current/security/api_key_authentication.html#storing-authentication-in-the-session 세션에 인증을 저장하지 않고 상태 비 저장 true로 설정하면 매번 인증 될 것으로 예상됩니다. – ste

관련 문제