Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 处理刷新令牌_.net_Ajax_Security_Asp.net Web Api - Fatal编程技术网

.net 处理刷新令牌

.net 处理刷新令牌,.net,ajax,security,asp.net-web-api,.net,Ajax,Security,Asp.net Web Api,我的ASP.NET WebAPI中有一个使用OWIN身份验证的web api,我需要实现刷新令牌 当用户登录时,API向客户端发送访问令牌、到期日(3分钟)和刷新令牌 然后令牌保存在客户机localStorage中 我知道如果access\u令牌过期,使用refresh\u令牌是为了获取新的access\u令牌 现在我的问题是什么时候做 每次我请求Web API中的数据时,是否需要检查客户端是否仍有有效/未过期的访问\u令牌?如果访问令牌过期,我需要请求一个新的访问令牌,对吗 例如: 客户端(移

我的ASP.NET WebAPI中有一个使用OWIN身份验证的web api,我需要实现刷新令牌

当用户登录时,API向客户端发送
访问令牌
到期日
(3分钟)和
刷新令牌

然后令牌保存在客户机
localStorage

我知道如果
access\u令牌
过期,使用refresh\u令牌是为了获取新的
access\u令牌

现在我的问题是什么时候做

每次我请求Web API中的数据时,是否需要检查客户端是否仍有有效/未过期的
访问\u令牌
?如果访问令牌过期,我需要请求一个新的访问令牌,对吗

例如:

  • 客户端(移动混合应用程序)请求
    api/订单
    (Web api)中的数据
  • 客户端检测到他使用的
    access\u令牌已根据本地存储中保存的
    expiration\u日期过期
  • 我需要“停止”请求,使用
    refresh\u-token
    获取新的
    access\u-token
    ,然后再次请求
    api/orders
    。基本上同时做三个请求?在我看来有点效率
  • 或者让用户再次登录?我是说每3分钟用户需要登录一次?这违背了这个目的

    你知道怎么处理吗

    在下面这个示例ajax请求中,有人能想出办法来处理这个问题吗

    $.ajax({
          type: 'GET',
          url: WEB_API_URL,
          data: data,
          dataType: 'json',
          beforeSend: function(xhr) {
             // need to check if the accessToken is expired
             xhr.setRequestHeader("Authorization", "Bearer " + accessToken);
           },
       }).
    

    您应该首先从数据存储中获取令牌。检查它们在接下来的几秒钟内是否有效。您不希望遇到失败的授权,因为您的请求因某些原因而延迟

    如果令牌即将过期,请使用刷新令牌获取新的访问令牌

    然后将请求发送到Web Api

    简言之

    1. Get token from datastore.
    2. Check if token is valid.
    3. If not valid, get new token.
    4. Send request to Web Api.
    

    我没有Ajax方面的经验,但使用此流程,您应该能够处理最多2个api请求。

    1-3在登录中完成,如果客户端已经登录,该怎么办。我们需要再打1-3吗?如果令牌在向WebAPI请求时无效,情况会变得复杂。我的观点是,当用户登录时,它的令牌存储在localStorage中,然后在向API的后续请求中,它将使用该令牌。如果用户已登录时令牌过期怎么办?在我的例子中,我的令牌将在3分钟内到期。这就是为什么您需要为每个请求从数据存储中检索令牌。其他任何情况下,您在3分钟后无法再提出请求。我不知道具体的背景,但是如果你想减少对新令牌的调用量,可能会增加过期时间?你是说每次请求我都需要请求一个新的访问令牌?你说的数据存储是什么意思?我的实现是,当用户登录时,我从web api获取access_令牌,然后将其保存在客户端的localStorage中。每次对API的请求,我都使用来自localStorage的这个访问令牌。现在,当这个令牌过期时,问题就出现了。这是我的问题。下一步是什么?数据存储,我指的是本地存储。当它过期或即将过期时,请使用刷新令牌从Web Api检索新的访问令牌。再次将新的访问令牌存储在本地存储中。