AngularJS-Manejo de token de actualización?


Estoy construyendo un SPA con AngularJS con comunicación a un servicio (JAVA).

Cuando el usuario envía su nombre de usuario/pase, el servicio devuelve ambos: token de acceso y token de actualización. Estoy tratando de manejar: si recibo respuesta con el estado 401, envíe de vuelta el token de actualización y luego envíe su última solicitud de nuevo. Traté de hacer eso con la inclusión de http http, pero angular no me permite incluirlo en este interceptor. ¿Hay alguna manera de recrear la solicitud original con este parámetro de respuesta ¿recibiendo?

Algo como:

  1. Tengo 401
  2. guardar mi solicitud
  3. si tengo un token de actualización enviar ese token de actualización
  4. en caso de éxito reenviar mi solicitud
  5. Por error redirigir a / página de inicio de sesión

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

Pregunta de bonificación (la pregunta principal es más importante): Hay 2 aplicaciones móviles que también se conectarán a mi servicio, y cuando inicie sesión desde mi aplicación web, y unos momentos después desde mi aplicación móvil, la aplicación móvil toma un nuevo token de actualización y el token de actualización de mi aplicación web ya no es válido. ¿Cuál sería la mejor opción para lidiar con eso?

Gracias por su tiempo, Saludos cordiales

Author: DyslexicDcuk, 2014-04-29

2 answers

Echa un vistazo a esto: https://github.com/witoldsz/angular-http-auth .

Utiliza un búfer para reproducir las solicitudes después de la autenticación.

 11
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-29 14:18:08

Recomiendo encarecidamente en contra de enviar y almacenar tokens de actualización en SPAs como Angular.

Si está utilizando almacenamiento de sesión o almacenamiento local, está abriendo una ventana de oportunidad para que este refreshToken sea capturado, ya sea por un ataque XSS, o por el usuario dejando el equipo desatendido.

Ver este artículoo esta pregunta para más información.

 4
Author: amaurymartiny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-24 07:24:01