AngularJS - Manipulation d'actualisation jeton?

je construis un SPA avec AngularJS avec communication à un service (JAVA).

lorsque l'utilisateur envoie son nom d'utilisateur / pass, le service renvoie à la fois: jeton D'accès et jeton de rafraîchissement. J'essaie de gérer: si j'obtiens la réponse avec le statut 401, renvoie le jeton de rafraîchissement et ensuite envoie à nouveau ta dernière demande. J'ai essayé de le faire avec $http inclus, mais angular ne me laisse pas l'inclure dans cet intercepteur. Y a-t-il un moyen de recréer la demande originale avec cette réponse? paramètre que je vais recevoir?

quelque chose comme:

  1. je obtenir 401
  2. Enregistrer ma demande
  3. si j'ai un jeton d'actualisation envoyer actualiser jeton
  4. sur le succès de renvoyer ma demande
  5. sur l'erreur de redirection vers /en de la page de 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);
        }
    };
    });
    

question Bonus (la question principale est plus importante): il y a 2 applications mobiles qui se connecteront également à mon service, et lorsque je me connecte à partir de mon application web, et quelques instants plus tard à partir de mon application mobile, l'application mobile prend un nouveau jeton de rafraîchissement et le jeton de rafraîchissement de mon application web n'est plus valide. Quelle serait la meilleure option pour faire face à cela?

Merci pour votre temps, Meilleures salutations

22
demandé sur DyslexicDcuk 2014-04-29 17:52:31

2 réponses

regardez ça: https://github.com/witoldsz/angular-http-auth .

il utilise un buffer pour rejouer les requêtes après authentification.

11
répondu Sam 2014-04-29 14:18:08

je conseillerais fortement contre envoyer et stocker des jetons de rafraîchissement sur les SPAs Comme Angular.

si vous utilisez le stockage de session ou le stockage local, vous ouvrez une fenêtre d'opportunité pour que ce refreshToken soit capturé, soit par une attaque XSS, soit par l'utilisateur laissant l'ordinateur sans surveillance.

Voir cet article ou cette question pour plus d'info.

4
répondu amaurymartiny 2017-07-24 07:24:01