经常影响刷新访问令牌的影响

时间:2014-12-16 04:34:41

标签: asp.net angularjs authentication asp.net-web-api owin

在我的.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;
});

0 个答案:

没有答案