在 AngularJS SPA 中使用刷新令牌

Posted

技术标签:

【中文标题】在 AngularJS SPA 中使用刷新令牌【英文标题】:Using refresh tokens within AngularJS SPA 【发布时间】:2018-12-27 10:58:25 【问题描述】:

通过 AngularJS 中的刷新令牌请求新的 JWT 身份验证令牌的正确方法是什么?

我已经有一个实现,它在每个 API 请求上检查会话是否需要刷新,如果需要,则从网络服务器请求一个新令牌。但是,如果一个页面一次进行 3 次调用,它会为每个调用请求一个新的刷新令牌,这似乎是不正确的 - 我认为它应该只更新一次令牌。

有没有办法阻止其他调用,或者我应该将刷新设置为间隔而不是通过拦截器进行?

拦截器请求方法

request = (config: angular.IRequestConfig) => 

    this.setBearerToken(config);

    var responsePromise = this.$q.when(config);

    if (config.url !== this.tokenUrl) 

        const factSession = this.$injector.get("factSession") as Session;

        if (factSession.shouldRefreshToken()) 
            responsePromise = factSession
                .refreshSession()
                .then(() => 
                    this.setBearerToken(config);

                    return config;
                );
        
    

    return responsePromise;

【问题讨论】:

【参考方案1】:

只需增强您的refreshSession 方法,它就不会刷新几次。

var refreshPromise;

refreshSession: () => 
  if (!refreshPromise) 
    refreshPromise = $http.get(...);
    refreshPromise.finally(() => refreshPromise = null);
  

  return refreshPromise;

【讨论】:

以上是关于在 AngularJS SPA 中使用刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS - 处理刷新令牌?

SPA中令牌存储和刷新的选项

SPA 中的令牌存储和刷新选项

AngularJS SPA 需要重新加载以识别 localstorage 中的 jwt 令牌

为啥刷新令牌对于 SPA 来说被认为是不安全的?

带有存储在 cookie 中的刷新令牌的 SPA - 如何使用 IdentityServer4 进行配置?