2017-04-23 3 views
1

모바일 응용 프로그램을 개발 중이며 기간이 제한적이라는 것을 알고 있습니다. 나는 나에게 새로 고침 기능이있는 심포니 서버를 사용하고 토큰 :만료 된 JWT 토큰 - 토큰을 새로 고치는 방법

/** 
* @Route("/api/refresh", name="api_refresh") 
*/ 
public function refreshTokenAction(Request $request) 
{ 
    if(!$request->headers->has('Authorization')) { 
     return; 
    } 

    $extractor = new AuthorizationHeaderTokenExtractor(
     'Bearer', 
     'Authorization' 
    ); 

    $token = $extractor->extract($request); 

    $encoder = $this->get('lexik_jwt_authentication.encoder'); 

    $data = $encoder->decode($token); 

    if(!$data){ 
     return; 
    } 

    $username = $data['mail']; 

    $user = $this->getDoctrine()->getRepository('AppBundle:Benevole') 
     ->findOneBy(['mail' => $username]); 

    $token = $this->get('lexik_jwt_authentication.encoder') 
     ->encode(['mail' => $user->getMail()]); 

    // Return genereted tocken 
    return new JsonResponse(['token' => $token]); 

} 

내가 이런 식으로 내 서버를 호출하는 AngularJS와의 응용 프로그램으로이 서버를 사용

var refreshToken = function(idPatient){ 
    var token = window.localStorage.getItem('token'); // current valid token 
    return $http({ 
      method : 'GET', 
      url  : url + '/refresh', 
      headers : {Authorization : 'Bearer ' + token}, 
     }).then(function(result) { 
     console.log(result.data); 
     return result.data; 
    }); 
}; 

내 함수 새로 고침 토큰을 테스트 할 때 버튼을 클릭하면 작동하고 토큰이 새로 고쳐집니다.

내 토큰을 새로 고칠 수있는 방법을 알고 싶습니다. 사용자가 매번 연결을 끊을 필요가 없도록하기 위해서입니다. ^^ 매번 토큰을 확인해야합니까? 응용 프로그램이 매번 이것을 찾을 수있는 몇 가지 조건을 넣어야합니까?

답변

4

마시는 유효 (만료되지 않은) 토큰 만 받아 들여야합니다. 클라이언트가 exp 클레임에 표시된 만료 날짜 전에 토큰을 새로 고치는 것은 클라이언트의 책임이라고 가정합니다.

토큰을 주기적으로 새로 고치려면 페이지에서 해당 기능이 활성화되어있는 동안이 함수를 호출하십시오.


하면, 예를 들어, 토큰이 주장을 추가하여 토큰 다과의 트랙을 유지할 수 무기한 갱신되는 토큰을 방지하기 위해 (청구 이름은 당신에게 달려 있습니다) :

  • refreshLimit : 토큰을 새로 고칠 수있는 횟수를 나타냅니다.
  • refreshCount : 토큰이 새로 고쳐진 횟수를 나타냅니다. 다음 조건에 해당하는 경우

그래서에만 토큰을 새로 고침 :

토큰이 만료되지
  • (exp >= now).
  • 토큰이 새로 고쳐진 횟수가 토큰을 새로 고칠 수있는 횟수보다 작습니다 (refreshCount < refreshLimit).

그리고 토큰을 새로 고칠 때 :

  • 업데이트를 만료 날짜 (exp = now + some-amount-of-time).
  • 토큰이 새로 고쳐진 횟수를 증가시킵니다 (refreshCount++).

일단 토큰에 서명하고 서버 측에서 서명을 확인하면 토큰의 내용을 클라이언트가 변조 할 수 없습니다.

+1

refreshCount 대신, 새로 고침 횟수를 제한하는 맞춤 속성 인 절대 만료 시간을 도입 할 수도 있습니다. – zerkms

+1

그것은 또 다른 유효한 접근법입니다. –

+1

그래, 그들은 실제로 동일합니다 :-) 나는 또한 사람들이 짧은 생존 JWT를 발행하는 데 사용되는 별도의 긴 생체 재생 토큰을 발행하는 것을 보았습니다. 어떤 경우에는 더 편리 할 수 ​​있습니다. – zerkms