2015-03-19 5 views
2

Привет, Я создаю приложение, где я использую Owin Tokens для проверки полномочий пользователя и авторизации.Owin Token истекает даже после непрерывной работы с сервером

Я могу сгенерировать токен и установить истечение, как ожидалось.

Выпуск

Что делать, если я установить срок для этого маркера до 30 минут, и пользователь был неактивен до 25 минут, а на 26-й минуте он начал использовать приложение, а в середине работы, на 30-й минуте токен истечет, и все данные могут быть потеряны.

Как я могу сохранить токен, как, например, у нас была проверка подлинности, которая истекает через 30 минут бездействия. ?

public void Configuration(IAppBuilder app) 
    { 
     ConfigureOAuth(app); 
    //Rest of code is here; 
    } 

    public void ConfigureOAuth(IAppBuilder app) 
    { 
     OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
     { 
      AllowInsecureHttp = true, 
      TokenEndpointPath = new PathString("/token"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30), 
      Provider = new SimpleAuthorizationServerProvider() 
     }; 

     // Token Generation 
     app.UseOAuthAuthorizationServer(OAuthServerOptions); 
     app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 

    } 
+0

MSDN говорит «Клиентское приложение, как ожидается, чтобы обновить или приобрести новый маркер доступа после того, как токен истек ». так что это не значит, что вы _must_ получаете новый токен (возможно, через RefreshTokenProvider?). Если вы беспокоитесь о потерянных данных, вам может понадобиться некоторое временное настойчивость. – VictorySaber

+0

для использования RefreshTokenProvider Я думаю, мне нужно получить токен в каждом запросе, которого я хочу избежать. – Moiz

ответ

2

Что я сделал в моем приложении:

При запуске приложения он проверяет

  1. если «истекает дата - 30-х годов» < Теперь чем обновить маркер и обновление даты истечения срока действия. Выполните шаг 2
  2. Перепланирование refreshTokenIfNeededfunction в «истекает дата - 30-х годов - теперь» секунд

образец:

public refreshTokenIfNeeded(): void { 

    var self = this; 

    var tokenHolder = self.tokenService.getToken(); 
    if (tokenHolder == null || !tokenHolder.refreshToken) { 
     self.logout(); 
     return; 
    } 

    var expireTimeInMiliseconds = (new Date(tokenHolder.expirationTime).getTime() - 30000 - new Date().getTime()); 
    if (expireTimeInMiliseconds > 0) { 
     setTimeout(() => self.refreshTokenIfNeeded(), expireTimeInMiliseconds); 
     return; 
    } 

    var data = "grant_type=refresh_token&refresh_token=" + tokenHolder.refreshToken + "&client_id=" + self.externalAuthService.getClientId(); 

    self.$http.post('/token', data, { 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded' 
     } 
     }) 
     .success((response: ILoginTokenResponse) => { 
     self.persist(response); 

     setTimeout(() => self.refreshTokenIfNeeded(), (response.expires_in - 30) * 1000); 

     }).error(() => { 
     this.logout(); 
     }); 
} 
+0

в порядке. любой пример кода? – Moiz

+0

@Moiz обновил ответ – Artiom

+0

Спасибо, я постараюсь реализовать – Moiz

Смежные вопросы