Подтвердить что ты не робот

AngularJS - Обработка токена обновления?

Я создаю SPA с AngularJS с сообщением службе (JAVA).

Когда пользователь отправляет свое имя пользователя/пароль, служба отправляет обратно оба: токен Acces и токен Refresh. Я пытаюсь обработать: если я получаю ответ со статусом 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);
        }
    };
    });
    

Бонусный вопрос (главный вопрос более важен): Есть два мобильных приложения, которые также подключаются к моей службе, а когда я вхожу в систему из своего веб-приложения, а через несколько мгновений из своего мобильного приложения, мобильное приложение принимает новый токен обновления и токен обновления моего веб-приложения действительны не более. Какой был бы лучший способ справиться с этим?

Спасибо за ваше время, С наилучшими пожеланиями

4b9b3361

Ответ 1

Посмотрите на это: https://github.com/witoldsz/angular-http-auth.

Он использует буфер для повторного воспроизведения запросов после аутентификации.

Ответ 2

Я бы настоятельно рекомендовал против отправлять и хранить токены обновления в SPA, например Angular.

Если вы используете хранилище сеансов или локальное хранилище, вы открываете окно возможностей для того, чтобы этот refreshToken был захвачен, либо с помощью атаки XSS, либо пользователем, оставив компьютер без присмотра.

Для получения дополнительной информации см. эту статью или этот вопрос.