处理刷新令牌

时间:2014-06-11 07:07:17

标签: .net ajax security asp.net-web-api

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

当用户登录时,API会向客户端发送Access_TokenExpiry_Date(3分钟)和Refresh_token

然后令牌保存在客户端localStorage中。

我知道如果access_token过期,则使用refresh_token即可获得新的access_token

现在我的问题是何时这样做?

我是否需要检查客户端是否仍然有一个有效/未过期access_token每次请求Web API中的数据?如果access_token过期,我需要请求一个新的access_token吗?

例如:

  1. 客户端(移动混合应用)请求api/orders(Web API)中的数据。
  2. 客户端检测到他使用的access_token已根据localStorage中保存的Expiry_Date过期。
  3. 我需要“停止”请求,使用access_token获取新refresh_token,然后再次请求api/orders。基本上同时做三个请求?在我看来有点高效。
  4. 或让用户再次登录?我的意思是用户需要每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);
           },
       }).
    

1 个答案:

答案 0 :(得分:1)

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

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

然后将您的请求发送到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的经验,但是通过这个流程,您应该能够处理您的请求,最多只能向您的api发送2个请求。