Xác thực HTTP cơ bản dễ bị nghe lén và tấn công trung gian. Bạn nên sử dụng HTTPS.
Tuy nhiên, nếu đó không phải là một tùy chọn, bạn luôn có thể gửi lại cookie cho khách hàng và có tên người dùng/mật khẩu được nhập vào đó để ngăn không cho nó hiển thị trong tệp JS. Đi mà không nói rằng mật khẩu ít nhất nên được mã hóa/băm vì lý do bảo mật. Sau đó, onus sẽ ở phía máy chủ để lấy các chi tiết xác thực từ cookie.
Bây giờ, nếu bạn không có bất kỳ kiểm soát nào đối với việc sửa đổi mã phía máy chủ, bạn sẽ không còn lựa chọn nào khác ngoài việc chôn chi tiết thông tin xác thực trong phương thức toàn cầu ajaxSend()
. Yêu cầu AJAX. Bạn có thể chỉ cần đặt nó trong một số tệp .js khác và làm cho nó khó tìm, nhưng bạn bị hạn chế khá nhiều đối với hình thức bảo mật đó. Mặc dù, cookie không làm cho cuộc sống của bạn an toàn hơn. (Sẽ tốt nếu mật khẩu được băm/mã hóa).
Điều khác bạn có thể làm là có hình thức bảo mật hơi phức tạp hơn: Yêu cầu máy chủ gửi trả lại nonce với mọi câu trả lời - nonce sẽ được 'ký' bởi máy chủ bằng khóa bí mật của máy chủ và bạn có thể sử dụng điều đó để 'mã hóa' tên người dùng/mật khẩu ở phía máy khách cho mọi yêu cầu. Máy chủ của bạn sau đó sẽ phải liên tục giải mã thông tin xác thực. Điều này là ít dễ bị người đàn ông-in-the-giữa nhưng vẫn không dễ dàng.
HTTPS sẽ giúp bạn tiết kiệm từ mỗi phần trên nếu đó là tùy chọn cho bạn.
Hy vọng điều này sẽ hữu ích.
CẬP NHẬT(theo bình luận): Bản chất của cảm giác yên tĩnh-Ness là sự vắng mặt của nhà nước trên máy chủ. Tức là, không có phiên nào! Do đó bạn cần gửi thông tin người dùng với yêu cầu MỌI khách hàng tạo ra máy chủ. Nếu bạn có một trang đăng nhập thì rất khó để thực sự yên tâm vì không có 'tài nguyên' được gọi là đăng nhập. Tuy nhiên, đây là những gì bạn có thể làm:
- lần User trang đăng nhập, vào thông tin và nhấp chuột 'đăng nhập'
- Gửi yêu cầu POST đến máy chủ với những thông tin quan trọng - có lẽ đến/Đăng nhập
- Có máy chủ trả lại tài nguyên được yêu cầu để xác thực là cần thiết VÀ đặt cookie có thông tin đăng nhập hợp lệ để sử dụng trong yêu cầu 'tiếp theo'
- Mọi yêu cầu tiếp theo sẽ được chuyển hướng đến tài nguyên tương ứng tại URL cụ thể với một hành động cụ thể (GET, PUT, POST , XÓA BỎ...). Máy chủ nên kiểm tra dữ liệu xác thực từ cookie và quyết định xem người dùng có được xác thực hay không và thực hiện thêm ủy quyền để cấp quyền truy cập nếu cần.
Mỗi yêu cầu phải xác định riêng của mình mà không cần phải máy chủ duy trì phiên - đó là tinh thần của statelessness (và yên tĩnh-Ness;)
Không phải là loại phá vỡ toàn bộ RESTFULness của máy chủ? Tôi có nghĩa là nếu bạn đang đi để đi mà tuyến đường cũng có thể chỉ làm xử lý phiên trên máy chủ. Đừng làm cho tôi sai Tôi vẫn còn trong bóng tối về nếu tôi vượt qua thông tin mỗi lần, lưu trữ chúng trên máy khách để vượt qua mỗi lần không nhất thiết phải là ý tưởng sáng nhất. – thenetimp
Không có gì sai khi truyền thông tin đăng nhập trong mọi yêu cầu. Trong REST, mọi yêu cầu phải tự mô tả (để loại bỏ nhu cầu các phiên trong máy chủ).Nếu tài nguyên được bảo vệ, thông tin xác thực là một phần của yêu cầu "mô tả" và thông tin đó sẽ được gửi cùng với tài liệu đó. Bạn chỉ có thể yêu cầu người dùng thông tin đăng nhập của mình và chuyển chúng vào mọi yêu cầu tiếp theo. Để OP, vui lòng không sử dụng các phiên. Bạn đang phá hủy vẻ đẹp của REST với nó. Bạn không cần phiên và bằng cách không sử dụng chúng, bạn sẽ giữ cho hệ thống của bạn dễ mở rộng hơn. – miguelcobain
Bạn có thể cung cấp ví dụ về mã backbone.js mà bạn đã viết cho việc triển khai này không? Tôi đang gặp sự cố khi làm việc. Bạn có thể thấy tiến trình của tôi trong [câu hỏi này] (http://stackoverflow.com/questions/14752326/adding-http-basic-authentication-header-to-backbone-js-sync-function-prevents-mo) – MusikPolice