Angularjs 代理刷新令牌获取新JWT的基本策略

Angularjs 代理刷新令牌获取新JWT的基本策略,angularjs,authentication,single-page-application,jwt,Angularjs,Authentication,Single Page Application,Jwt,我在实现Angular SPA和JWT方面做得很好,但我总是很难授权新的令牌 我的基本策略是: 在auth拦截器get auth Error=>Delegate和刷新令牌中,替换JWT,否则注销 这不起作用,因为将触发多个异步调用,其中一个将获得委托函数,但第二个调用将使用刷新令牌,该调用将失败,然后用户将注销 在做其他事情之前:检查令牌过期,如果过期=>用刷新令牌委派,替换jwt,否则注销 它有一个类似的问题,第一次调用会注意到它已经过期,然后去获取新的令牌,但是由于它是异步的,其余的调用会触

我在实现Angular SPA和JWT方面做得很好,但我总是很难授权新的令牌

我的基本策略是:

  • 在auth拦截器get auth Error=>Delegate和刷新令牌中,替换JWT,否则注销
  • 这不起作用,因为将触发多个异步调用,其中一个将获得委托函数,但第二个调用将使用刷新令牌,该调用将失败,然后用户将注销

  • 在做其他事情之前:检查令牌过期,如果过期=>用刷新令牌委派,替换jwt,否则注销
  • 它有一个类似的问题,第一次调用会注意到它已经过期,然后去获取新的令牌,但是由于它是异步的,其余的调用会触发并失败,等等

    这里的基本策略是什么。我觉得应用程序应该做的第一件事就是检查JWT和委托是否有新的标记,如果它是一个坏标记,但在这种情况下,它不应该是异步的。我只是在使用时不删除刷新令牌吗

    任何帮助都会很好,我觉得这是我理解上的最后一个大漏洞。谢谢

    尝试使用

    简而言之,第一个失败的http调用触发器和事件以及后续调用被推送到一个数组中。事件触发后,您有机会执行一些逻辑,然后重播失败的调用

    也就是说,在需要实际使用刷新令牌之前,您可能应该进行令牌轮换。例如,考虑这个可以添加到

    的代码 检查这个
    .config(function($httpProvider) {
        $httpProvider.interceptors.push(function(moment, $rootScope, $q, httpBuffer) {
            return {
                request: function (config) {
                    if ($rootScope.authToken) {
                        config.headers["Authentication"] = 'Bearer ' + $rootScope.authToken;
                        var payload = angular.fromJson(atob($rootScope.authToken.split('.')[1]));
                        var utcNow = moment.utc().valueOf();
                        // 3600000 ms = 1 hr
                        if(utcNow > payload.iat + 3600000){
                            $rootScope.$broadcast('auth:rotateToken', $rootScope.authToken);
                        }
                    }
    
                    return config;
                },
                //responseError: ...see Witold's code...
        });
    })