即使在与服务器连续 activity 之后,Owin 令牌也会过期
Owin Token expires even after continuous activity with server
您好,我正在创建一个应用程序,我在其中使用 Owin 令牌来验证用户权限和授权。
我能够生成令牌,它正在按预期设置到期时间。
问题
如果我将此令牌的到期时间设置为 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());
}
我在申请中做了什么:
应用程序启动时会检查
- if "expire date - 30s" < now 刷新令牌并更新过期日期。执行步骤 2
- 在 "expire date - 30s - now" 秒后重新安排 refreshTokenIfNeededfunction
示例:
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();
});
}
您好,我正在创建一个应用程序,我在其中使用 Owin 令牌来验证用户权限和授权。
我能够生成令牌,它正在按预期设置到期时间。
问题
如果我将此令牌的到期时间设置为 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());
}
我在申请中做了什么:
应用程序启动时会检查
- if "expire date - 30s" < now 刷新令牌并更新过期日期。执行步骤 2
- 在 "expire date - 30s - now" 秒后重新安排 refreshTokenIfNeededfunction
示例:
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();
});
}