Asp.net mvc 处理访问令牌的过期时间

Asp.net mvc 处理访问令牌的过期时间,asp.net-mvc,rest,bearer-token,Asp.net Mvc,Rest,Bearer Token,我在MVC项目中使用了一些web API方法。我正在做的是创建一个API处理类。我计划在该类的构造函数中获取访问令牌,然后再次将其附加到构造函数中的webapihandler对象。然后我将使用几个API调用,这很好。但是,我认为我必须在每次调用之前控制令牌的过期时间,如果它过期,那么我必须创建一个令牌。我不知道如何检查代币的到期时间 这是我第一次以这种方式处理代币,非常感谢您的帮助 您希望在数据库中保存访问令牌、刷新令牌、令牌过期时间和最后一次写入。最后一次写入是创建访问令牌的时间,令牌过期时间

我在MVC项目中使用了一些web API方法。我正在做的是创建一个API处理类。我计划在该类的构造函数中获取访问令牌,然后再次将其附加到构造函数中的webapihandler对象。然后我将使用几个API调用,这很好。但是,我认为我必须在每次调用之前控制令牌的过期时间,如果它过期,那么我必须创建一个令牌。我不知道如何检查代币的到期时间


这是我第一次以这种方式处理代币,非常感谢您的帮助

您希望在数据库中保存访问令牌、刷新令牌、令牌过期时间和最后一次写入。最后一次写入是创建访问令牌的时间,令牌过期时间应为访问令牌过期的时间,以分钟或秒为单位,以确保时间准确性

从这里开始,您只需将(上次写入时间+令牌过期时间)与现在的时间进行比较

在比较和保存数据库中的时间时,请记住始终使用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;
}
//在进行API调用之前调用此函数以获取令牌
公共静态异步任务GetAccessToken(令牌令牌)
{
字符串访问令牌;

if(token.LastWrite.AddSeconds)(token.Expiration)非常感谢您的时间。是否可以从令牌中提取令牌\u expire\u time?当您通过身份验证过程时,您将获得一个带有刷新令牌的令牌过期时间,这只是从结果中提取并保存在数据库中的问题。如果没有刷新或过期令牌,请阅读API docs,因为除非您再次验证,否则它很可能不允许刷新访问令牌。在响应标头expires字段中显示这是令牌的1970年1月1日吗?缓存控制:无缓存连接:保持活动内容类型:application/json;charset=utf-8日期:Thu,2020年4月30日08:52:37 GMT expires:Thu,1970年1月1日00:00 GMTpragma:no cache server:nginx/1.15.8传输编码:chunked x-powered-by:ASP.NET x-xss-protection:1;mode=block;我不确定这是什么。最好创建一个单独的问题,其中包含您尝试使用的特定API、如何设置身份验证以及尝试执行的操作。在本例中,我假设如何设置访问令牌refr谢谢你,格雷厄姆,我一定会的。