2014-05-13 13 views
5

Tôi đang xây dựng một ứng dụng AngularJS tương tác với một API sử dụng mã thông báo xác thực để xác thực người dùng. Tất cả mọi thứ dường như được làm việc tốt, nhưng tôi đang đấu tranh với một cách để duy trì đúng mã thông báo xác thực giữa các yêu cầu.Mã xác thực bền vững trong AngularJS

Hiện tại, khi người dùng đăng nhập bằng thông tin xác thực chính xác, authToken được trả về và tôi đang đặt số đó trên $rootScope.authToken. Tôi cũng gửi mã thông báo xác thực đó cho các yêu cầu trong tương lai, nhưng nếu tôi tải lại tải lại trang web với F5 $rootScope bị xóa và tôi phải xác thực lại.

Tôi biết mình có thể lưu authToken trong cookie, nhưng đó có phải là cách an toàn nhất không? Tôi có nên sử dụng bộ nhớ cục bộ để lưu trữ mã thông báo không? Nếu lưu trữ cục bộ được sử dụng, điều đó sẽ không bị xóa khi người dùng khởi động lại trình duyệt của họ không? Tôi lý tưởng như đăng nhập để tồn tại trong một vài ngày.

Trả lời

1

Thứ nhất, tôi không chắc định dạng của authToken của bạn là gì nhưng không được sử dụng localStorage cho bất kỳ dữ liệu nhạy cảm nào. Sử dụng localStorage hoạt động tốt (và khởi động lại trình duyệt khởi động lại) miễn là authToken của bạn tương đối giả mạo hoặc thông qua một số hình thức mã hóa hoặc nonce.

Về cơ bản, bạn nên cẩn thận vì giá trị "hiển thị" đối với tất cả người dùng phía máy khách nên được giả định là có thể sửa đổi hoặc tăng.

Bạn có nghĩ về việc thu hồi các phiên đăng nhập không? Ví dụ: nếu bạn muốn đăng xuất tất cả phiên hoạt động của ứng dụng, bạn sẽ làm như thế nào? Vì authToken được lưu trữ phía máy khách, bạn có thể cần thêm dấu thời gian (hoặc một số giá trị duy nhất khác) vào nó có thể được kiểm tra phía máy chủ.

+0

Trong trường hợp đó, có thể chấp nhận mã hóa mã thông báo đăng nhập ở phía máy chủ trước khi nó được gửi tới người dùng để họ lưu trữ phiên bản được mã hóa không? Sau đó, khi mã thông báo được gửi đến máy chủ, nó sẽ được giải mã và kiểm tra để đảm bảo nó hợp lệ vv. Không có vấn đề gì về việc thu hồi tất cả phiên người dùng, chúng được lưu trữ trong bảng và mọi yêu cầu của khách hàng đều được kiểm tra. Nếu tôi xóa bảng, mọi người sẽ đăng xuất :) –

+0

Có, chắc chắn mã hóa phía máy chủ và kiểm tra lại nó theo từng yêu cầu API mà máy chủ nhận được. Đó là mô hình an toàn nhất để sử dụng như một cổng bảo mật cơ bản. Vẫn còn một vài vấn đề với cách tiếp cận này và tôi khuyên bạn cũng nên thiết lập một mã thông báo CSRF (ngoài giá trị 'authToken' của bạn). AngularJS hỗ trợ mã thông báo thứ cấp này nguyên bản và điều này sẽ thêm một rào cản khác cho ứng dụng của bạn. Xem qua các tài liệu về XSRF tại đây: https://docs.angularjs.org/api/ng/service/$http –

+0

Thật tuyệt vời, cảm ơn. –

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