在我的.NET Web API 2服务器上,我使用OWIN进行身份验证。我已经关注Taiseer's tutorial并成功实现了访问令牌刷新机制。
我想知道如果客户经常更新其访问令牌,是否会对任何事情产生任何影响,例如平均每5分钟刷新一次。
我问这个问题,因为我的页面上有一个按钮,当用户点击它时,该页面上的数据被发送到不同的端点。这些端点标有属性[Authorize]
。
以前,当我向单个受保护端点发送请求时,我可以检查响应是否为401 (unauthorized)
。如果是这样,我可以先刷新用户的访问令牌,然后使用新令牌重新发送被拒绝的请求。但是,我不知道这次可以做同样的事情,因为有很多请求一次发送。上述方法在我的AngularJS拦截器中实现。它可以处理单个但不是多个被拒绝的未授权请求。
仅供参考,这是我的拦截器代码,可以从a source on GitHub找到并修改。
app.factory('authInterceptor', function($q, $injector, $location, localStorageService) {
var authInterceptor = {};
var $http;
var request = function(config) {
config.headers = config.headers || {};
var jsonData = localStorageService.get('AuthorizationData');
if (jsonData) {
config.headers.Authorization = 'Bearer ' + jsonData.token;
}
return config;
}
var responseError = function(rejection) {
var deferred = $q.defer();
if (rejection.status === 401) {
var authService = $injector.get('authService');
authService.refreshToken().then(function(response) {
_retryHttpRequest(rejection.config, deferred);
}, function() {
authService.logout();
$location.path('/login');
deferred.reject(rejection);
});
} else {
deferred.reject(rejection);
}
return deferred.promise;
}
var _retryHttpRequest = function(config, deferred) {
$http = $http || $injector.get('$http');
$http(config).then(function(response) {
deferred.resolve(response);
}, function(response) {
deferred.reject(response);
});
}
authInterceptor.request = request;
authInterceptor.responseError = responseError;
return authInterceptor;
});