AngularJS – Manipulation de jeton de rafraîchissement?

Je crée un SPA avec AngularJS avec une communication à un service (JAVA).

Lorsque l'utilisateur envoie son nom d'utilisateur / passe, le service renvoie les deux: Acces token et Refresh token. J'essaie de gérer: si je reçois une réponse avec l'état 401, renvoyez le jeton de rafraîchissement, puis envoyez votre dernière demande à nouveau. J'ai essayé de le faire en incluant $ http, mais angulaire ne me laisse pas l'inclure dans cet intercepteur. Existe-t-il un moyen de recréer la demande originale avec ce paramètre de réponse que je reçois?

Quelque chose comme:

  1. J'ai 401
  2. Sauvegarder ma demande
  3. Si j'ai un jeton de rafraîchissement, envoyez ce jeton de rafraîchissement
  4. En réinsérer ma demande
  5. En cas d'erreur, rediriger vers la page de connexion

    '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 de bonus (la question principale est plus importante): il y a 2 applications mobiles qui se connecteront également à mon service et quand je me connecte à partir de mon application Web, et quelques instants plus tard de mon application mobile, une 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, Cordialement

Regardez ceci: https://github.com/witoldsz/angular-http-auth .

Il utilise un tampon pour rejouer les demandes après l'authentification.

Je conseillerais fortement d'envoyer et de stocker des jetons de rafraîchissement sur des SPA 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'informations.