Ответ 1
Посмотрите на это: https://github.com/witoldsz/angular-http-auth.
Он использует буфер для повторного воспроизведения запросов после аутентификации.
Я создаю SPA с AngularJS с сообщением службе (JAVA).
Когда пользователь отправляет свое имя пользователя/пароль, служба отправляет обратно оба: токен Acces и токен Refresh. Я пытаюсь обработать: если я получаю ответ со статусом 401, отправьте токен обновления, а затем снова отправьте свой последний запрос. Я попытался сделать это с включением $http, но angular не позволяет включить его в этот перехватчик. Есть ли способ воссоздать исходный запрос с этим параметром ответа, который я получаю?
Что-то вроде:
при переадресации ошибок на страницу /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);
}
};
});
Бонусный вопрос (главный вопрос более важен): Есть два мобильных приложения, которые также подключаются к моей службе, а когда я вхожу в систему из своего веб-приложения, а через несколько мгновений из своего мобильного приложения, мобильное приложение принимает новый токен обновления и токен обновления моего веб-приложения действительны не более. Какой был бы лучший способ справиться с этим?
Спасибо за ваше время, С наилучшими пожеланиями
Посмотрите на это: https://github.com/witoldsz/angular-http-auth.
Он использует буфер для повторного воспроизведения запросов после аутентификации.
Я бы настоятельно рекомендовал против отправлять и хранить токены обновления в SPA, например Angular.
Если вы используете хранилище сеансов или локальное хранилище, вы открываете окно возможностей для того, чтобы этот refreshToken был захвачен, либо с помощью атаки XSS, либо пользователем, оставив компьютер без присмотра.
Для получения дополнительной информации см. эту статью или этот вопрос.