21

Tôi đang xây dựng một SPA với AngularJS với giao tiếp với một dịch vụ (JAVA).AngularJS - Xử lý mã thông báo làm mới?

Khi người dùng gửi tên người dùng/thẻ, dịch vụ gửi trả lại cả hai: Mã thông báo Acces và Mã thông báo làm mới. Tôi đang cố gắng xử lý: nếu tôi nhận được phản hồi với trạng thái 401, hãy gửi lại mã thông báo làm mới và sau đó gửi lại yêu cầu cuối cùng của bạn. Tôi đã cố gắng làm điều đó với việc bao gồm $ http, nhưng góc cạnh không cho phép tôi đưa nó vào trong máy đánh chặn này. Có cách nào để tạo lại yêu cầu ban đầu với thông số phản hồi này mà tôi nhận được không?

Cái gì như:

  1. tôi nhận được 401
  2. lưu yêu cầu của tôi
  3. nếu tôi có làm mới gửi token làm mới thẻ
  4. trên thành công gửi lại yêu cầu
  5. tôi trên chuyển hướng lỗi đến/đăng nhập trang

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

Câu hỏi thưởng (câu hỏi chính quan trọng hơn): Có 2 ứng dụng dành cho thiết bị di động cũng sẽ kết nối với dịch vụ của tôi và khi tôi đăng nhập từ ứng dụng web của mình. lấy mã thông báo làm mới mới và mã thông báo làm mới của ứng dụng web của tôi không còn hợp lệ nữa. Điều gì sẽ là lựa chọn tốt nhất để đối phó với điều đó?

Cảm ơn bạn đã dành thời gian, Trân trọng

+0

Hi @dyslexisDcuk, bạn có bất kỳ thành công nào trên đó, vui lòng chia sẻ với tôi. Cảm ơn –

Trả lời

10

Có xem xét này: https://github.com/witoldsz/angular-http-auth.

Anh ấy sử dụng bộ đệm để phát lại các yêu cầu sau khi xác thực.

+0

Rực rỡ! Sẽ kiểm tra nó ra sau và lấy lại cho bạn, cảm ơn rất nhiều :) – DyslexicDcuk

+0

Nó đã không thực sự trả lời câu hỏi của tôi, nhưng nó đã đưa tôi đi đúng hướng. Cảm ơn – DyslexicDcuk

+0

Vì vậy, giải pháp cuối cùng của bạn là gì? –

2

Tôi đặc biệt khuyên bạn chống lại gửi và lưu trữ mã thông báo làm mới trên các SPA như Góc.

Nếu bạn đang sử dụng bộ nhớ phiên hoặc bộ nhớ cục bộ, bạn đang mở một cửa sổ cơ hội cho quá trình refreshToken này được chụp bằng tấn công XSS hoặc do người dùng rời khỏi máy tính không cần giám sát.

Xem this article hoặc this question để biết thêm thông tin.

Các vấn đề liên quan