我在MVC项目中使用了一些Web API方法。我正在做的是创建一个API处理类。我打算在此类的构造函数中获取访问令牌,然后将其再次附加到构造函数中的webapihandler对象。然后,我将消耗几个API调用,这很好。但是,我认为我必须在每次调用之前控制令牌的过期时间,如果令牌已过期,则必须创建一个。我不知道如何检查令牌的到期时间。
这是我第一次以这种方式处理令牌,感谢您的帮助。
您要在数据库中保存access_token,refresh_token,token_expire_time和last_write。 last_write是访问令牌的创建时间,token_expire_time应该是访问令牌在数分钟后到期的时间。
从那里您只需将(last_write时间+ token_expire_time)与现在的时间进行比较。
[在比较时间并将其保存在数据库或其他时区时,请记住始终使用DateTime.UtcNow,并且将其扔掉,它不会正确刷新。
这里是一个例子
数据库类
public class Token
{
public int Id { get; set; }
public string AccessToken { get; set; }
public string RefreshToken { get; set; }
public DateTime LastWrite { get; set; }
public int Expiration { get; set; }
}
检查刷新的功能:
// call this to get the token before making API call
public static async Task<string> GetAccessToken(Token token)
{
string accessToken;
if (token.LastWrite.AddSeconds(token.Expiration) <= DateTime.UtcNow)
{
// refresh and update the database with the new tokens/expiration
}
else
{
accessToken = token.AccessToken;
}
return accessToken;
}