2014-06-11 2 views
1

ASP.NET WebAPI에서 OWIN 인증을 사용하는 웹 API가있어서 새로 고침 토큰을 구현해야합니다.새로 고침 토큰 처리

사용자가 로그인하면 API가 클라이언트에 Access_Token, Expiry_Date (3 분) 및 Refresh_token을 전송합니다.

그런 다음 토큰은 클라이언트 localStorage에 저장됩니다.

access_token이 만료 된 경우 refresh_token을 사용하면 새로운 access_token을 사용한다는 것을 알고 있습니다.

이제 내 문제는 언제 할 수 있습니까?

웹 API에서 데이터를 요청할 때마다 클라이언트에 여전히 유효한/만료 기한이 있는지 확인해야합니까? access_token 언제라도 요청할 수 있습니까? access_token이 만료 되었다면 새로운 access_token 권한을 요청해야합니다. 예를 들어

: api/orders (웹 API)의 데이터에 대한

  1. 클라이언트 (모바일 하이브리드 응용 프로그램) 요청.
  2. 클라이언트가 사용하는 access_token이 localStorage에 저장된 Expiry_Date에 만료되었습니다.
  3. 요청을 "중지"해야합니다. refresh_token을 사용하여 새로운 access_token을 얻은 다음 api/orders을 다시 요청하십시오. 기본적으로 세 가지 요청을 동시에 수행 하시겠습니까? 나에게 조금은 효율적이라고 보인다.

또는 다시 로그인 하시겠습니까? 사용자가 로그인해야하는 3 분마다를 의미합니까? 이것은이 목적에 어긋납니다.

어떻게 처리해야할까요?

아래의 샘플 아약스 요청에서 누군가가이 문제를 처리 할 수 ​​있습니까?

$.ajax({ 
     type: 'GET', 
     url: WEB_API_URL, 
     data: data, 
     dataType: 'json', 
     beforeSend: function(xhr) { 
     // need to check if the accessToken is expired 
     xhr.setRequestHeader("Authorization", "Bearer " + accessToken); 
     }, 
    }). 

답변

1

먼저 데이터 저장소에서 토큰을 가져와야합니다. 다음 몇 초 동안 유효한지 확인하십시오. 귀하의 요청이 무언가에 의해 지연되기 때문에 실패한 승인을 받기를 원하지 않습니다.

토큰이 곧 만료 될 경우 새로 고침 토큰을 사용하여 새 액세스 토큰을 받으십시오.

그런 다음 Web API에 요청을 보냅니다.

요약하면;

1. Get token from datastore. 
2. Check if token is valid. 
3. If not valid, get new token. 
4. Send request to Web Api. 

나는 아약스와 경험이 없지만,이 흐름을 당신은 당신의 API에 대한이 요청의 최대 요청을 처리 할 수 ​​있어야합니다.

+0

1 ~ 3 번은 로그인으로 처리됩니다. 클라이언트가 이미 로그인 한 경우는 어떻게됩니까? 1-3 단계를 다시 수행해야합니까? 그리고 토큰이 webapi에 대한 요청 시간에 유효하지 않은 경우 복잡한 것입니다 –

+0

내 포인트는 사용자가 로그인 할 때 토큰이 localStorage에 저장되고 API에 이어지는 요청에서이 토큰을 사용합니다. 사용자가 이미 로그인했을 때 토큰이 만료되면 어떻게해야합니까? 제 경우에는 3 분 안에 토큰 만료가 있습니다. –

+0

그래서 모든 요청에 ​​대해 데이터 저장소에서 토큰을 검색해야합니다. 3 분 후에 더 이상 요청할 수없는 다른 사람. 특정 배경을 모르지만 새 토큰 호출 횟수를 줄이려면 만료 시간을 늘리십시오. –