AngularJS - 处理刷新令牌?

Posted

技术标签:

【中文标题】AngularJS - 处理刷新令牌?【英文标题】:AngularJS - Handling refresh token? 【发布时间】:2014-06-15 12:14:26 【问题描述】:

我正在使用 AngularJS 构建一个带有与服务 (JAVA) 通信的 SPA。

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

类似:

    我得到 401 保存我的请求 如果我有刷新令牌,请发送该刷新令牌 成功后重新发送我的请求

    错误重定向到 /login 页面

    '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);
        
    ;
    );
    

奖励问题(主要问题更重要):有 2 个移动应用程序也将连接到我的服务,当我从我的网络应用程序登录时,稍后从我的移动应用程序登录,移动应用程序需要新的刷新令牌和我的网络应用程序的刷新令牌不再有效。处理这个问题的最佳选择是什么?

感谢您的宝贵时间, 最好的问候

【问题讨论】:

嗨@dyslexisDcuk,你在这方面取得了任何成功,请与我分享。谢谢 【参考方案1】:

我强烈建议反对在 Angular 等 SPA 上发送和存储刷新令牌。

如果您正在使用会话存储或本地存储,则您正在打开一个机会之窗,以便通过 XSS 攻击或让计算机无人看管的用户来捕获此 refreshToken。

请参阅this article 或this question 了解更多信息。

【讨论】:

【参考方案2】:

看看这个:https://github.com/witoldsz/angular-http-auth。

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

【讨论】:

太棒了!稍后将对其进行测试并回复您,非常感谢:) 它并没有真正回答我的问题,但它确实把我带到了正确的方向。谢谢 那么,你最终的解决方案是什么? @DyslexicDcuk 介意发布您的解决方案吗? @mateeyow 很抱歉,我不久前换了公司,再也无法访问该代码了。

以上是关于AngularJS - 处理刷新令牌?的主要内容,如果未能解决你的问题,请参考以下文章

在 AngularJS SPA 中使用刷新令牌

laravel / angularjs JWT 令牌刷新

如果刷新(JWT)令牌未经授权(401响应),AngularJS重定向到登录

Angularjs 和 slim 框架 JWT 身份验证和令牌刷新流程

带有 JWT 的 AngularJS 或 SPA - 到期和刷新

前端小白之每天学习记录----angula2--