Javascript AngularJS-处理刷新令牌?

Javascript AngularJS-处理刷新令牌?,javascript,angularjs,authentication,access-token,http-status-code-401,Javascript,Angularjs,Authentication,Access Token,Http Status Code 401,我正在用AngularJS构建一个SPA,并与服务(JAVA)进行通信 当用户发送用户名/通行证时,服务同时发回:Acces令牌和刷新令牌。我正在尝试处理:如果我收到状态为401的响应,请发回刷新令牌,然后再次发送您的最后一个请求。我试图通过包含$http来实现这一点,但angular不允许我将其包含在这个拦截器中。有没有办法用我收到的这个响应参数重新创建原始请求 比如: 我拿到401 保存我的请求 如果我有刷新令牌,请发送该刷新令牌 成功后重新发送我的请求 错误时重定向到/登录页面 'use

我正在用AngularJS构建一个SPA,并与服务(JAVA)进行通信

当用户发送用户名/通行证时,服务同时发回:Acces令牌和刷新令牌。我正在尝试处理:如果我收到状态为401的响应,请发回刷新令牌,然后再次发送您的最后一个请求。我试图通过包含$http来实现这一点,但angular不允许我将其包含在这个拦截器中。有没有办法用我收到的这个响应参数重新创建原始请求

比如:

  • 我拿到401
  • 保存我的请求
  • 如果我有刷新令牌,请发送该刷新令牌
  • 成功后重新发送我的请求
  • 错误时重定向到/登录页面

    'use strict';
    
    angular.module('testApp')
        .factory('authentificationFactory', function($rootScope, $q, $window, $location, CONF) {
    
    return {
        request: function(config) {
            config.headers = config.headers || {};
            if ($window.sessionStorage.token) {
                config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
            }
            console.log(config);
            $rootScope.lastRequest = config;
            return config;
        },
    
        response: function(response) {
            console.log($rootScope.lastRequest);
            if (response.status === 401) {
                if ($window.sessionStorage.refreshToken) {
    
                    //Save, request new token, send old response
                    //if it fails, go to login
    
                    $location.url('/login');
                } else {
                    $location.url('/login');
                }
            }
            return response || $q.when(response);
        }
    };
    });
    
  • 奖金问题(主要问题更重要):有两个移动应用程序也将连接到我的服务,当我从我的web应用程序登录时,以及几分钟后从我的移动应用程序登录时,移动应用程序将使用新的刷新令牌,我的web应用程序的刷新令牌不再有效。处理这个问题的最佳选择是什么

    谢谢你抽出时间, 致以最诚挚的问候看看这个:


    他使用缓冲区在身份验证后重播请求。

    我强烈建议不要在像Angular这样的SPA上发送和存储刷新令牌

    如果您使用的是会话存储或本地存储,那么您将打开一个机会窗口,通过XSS攻击或用户让计算机无人值守来捕获此刷新令牌


    有关更多信息,请参阅或。

    Brilliant!稍后我会测试一下,然后回复你,非常感谢:)它并没有真正回答我的问题,但它确实把我带向了正确的方向。谢谢,你的最终解决方案是什么?@dyslexisDcuk介意发布你的解决方案吗?@MateeOw我真的很抱歉,我前一段时间换了公司,再也无法使用该代码了。嗨@dyslexisDcuk,你在这方面取得了任何成功,请与我分享。谢谢