Owin代币即使在与服务器连续活动后也会过期



你好,我正在创建一个应用程序,在那里我使用Owin Tokens来验证用户权限和授权。

我能够生成令牌,它正在按预期设置到期时间。

问题

如果我将此令牌的到期时间设置为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());
    }

我在应用程序中所做的事情:

当应用程序启动时,它会检查

  1. 如果"过期日期-30秒"<现在刷新令牌并更新过期日期。执行步骤2
  2. 在"过期日期-30s-现在"秒内重新安排refreshTokenIfNeedFunction

示例:

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();
      });
}

最新更新