我有一个在我的ASP.NET WebAPI中使用OWIN身份验证的web api,我需要实现刷新令牌。
当用户登录时,API会向客户端发送Access_Token
,Expiry_Date
(3分钟)和Refresh_token
。
然后令牌保存在客户端localStorage
中。
我知道如果access_token
过期,则使用refresh_token即可获得新的access_token
。
现在我的问题是何时这样做?
我是否需要检查客户端是否仍然有一个有效/未过期access_token
每次请求Web API中的数据?如果access_token过期,我需要请求一个新的access_token吗?
例如:
api/orders
(Web API)中的数据。access_token
已根据localStorage中保存的Expiry_Date
过期。access_token
获取新refresh_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);
},
}).
答案 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个请求。