8

Theo thông số REST, dịch vụ được coi là không trạng thái; nhưng sau đó nó trở nên khó khăn để cho phép xác thực. Một số trong những thứ tôi đã đọc nói "làm cho REST stateful không phải là kết thúc của thế giới". Nhưng đó không phải là vấn đề, quan điểm là phải tuân thủ thông số kỹ thuật và nhất quán.Xác thực dịch vụ RESTful

Vì vậy, tôi đặt câu hỏi này ở đây với hy vọng ai đó có thể hướng dẫn tôi đi đúng hướng. Tôi đang làm việc với Spring MVC để tạo ra một dịch vụ REST. Tôi không có quan điểm. Nó là một dịch vụ REST thực sự tiêu thụ/tạo JSON. Tôi cần phải có cơ chế xác thực (và ủy quyền xuống đường) cho ứng dụng này là không trạng thái và tuân theo đặc tả REST. Khách hàng sẽ được viết bằng JavaScript (Backbone.js, CoffeeScript) và sẽ chấp nhận tên người dùng/mật khẩu từ Người dùng. Sau đó, nó sẽ đăng thông tin đó lên máy chủ.

Làm cách nào tôi có thể đạt được xác thực không đúng trạng thái (và ủy quyền) trong ứng dụng dựa trên Spring?

Xác thực thông qua SSL - Đây có phải là cách để đi không?

+1

"Thông số REST" mà bạn nói là gì? Đó là một mẫu thiết kế và một bộ hướng dẫn, không phải là một đặc điểm kỹ thuật. – skaffman

Trả lời

2

Quản lý phiên khác với quản lý nhà nước.

Phía máy chủ trong quá trình bắt tay có thể tạo mã thông báo và mỗi lần khách hàng thực hiện cuộc gọi sẽ phải thêm mã thông báo đó vào đầu hoặc nơi khác để máy chủ của bạn có thể phân tích và quyết định xem bạn có thể cho phép gọi để tiếp tục.

Máy chủ không cần phải duy trì trạng thái nào để kiểm tra tính hợp lệ của mã thông báo đó có thể được thực hiện bằng một số thuật toán.

+0

Và làm thế nào bạn có thể đạt được điều đó ở phía máy chủ? –

+0

nhưng sau đó nếu thuật toán bị bẻ khóa bằng cách nào đó, bất kỳ mã thông báo nào cũng có thể được gửi tới tài nguyên truy cập – jsf

+0

Bạn cũng nên mã hóa mã thông báo đó có thể đơn giản là băm hoặc băm muối;) (cơ bản là băm của băm). đá vào nhưng nếu bạn đang sử dụng một thuật toán mã hóa tiêu chuẩn và ai đó làm nứt nó thì có vấn đề lớn đối với ngành nhiều hơn ứng dụng của riêng bạn. Sử dụng SSL sẽ đảm bảo các gói tin không được hỗ trợ nhưng việc sử dụng SSL là không cần thiết. Chúng tôi đã thấy FBI, Jboss và Sony vv bị xâm nhập vì vậy có không phải là không thể, nhưng sử dụng các thực hành tiêu chuẩn tốt sẽ đảm bảo rằng joe trung bình không thể đột nhập vào nó. – Shahzeb

2

Bạn đã xem cách hoạt động của Spring Security? Sử dụng Spring Security, tôi đã có thể thêm Tiêu đề ủy quyền HTTP tùy chỉnh từ máy khách trong Yêu cầu REST. Điều này được trích xuất phía máy chủ, người dùng yêu cầu được xác thực và có thể ủy quyền truy cập vào các tài nguyên cụ thể.

1

Bạn có thể sử dụng xác thực Cơ bản hoặc Thông báo qua SSL, không điều nào hàm ý bất kỳ điều gì quan trọng về trạng thái. Cũng có thể có một cookie được máy chủ gửi lại, mà khách hàng của bạn sẽ cần phải gửi lại khi yêu cầu thêm (I tin rằng rằng mã Javascript sẽ xử lý tất cả những gì cho bạn). Có những cơ chế xác thực khác có thể, nhưng chúng phức tạp hơn và không nhất thiết phải phù hợp. (Một khóa không chính thức khác là SSL được khách hàng xác thực, nhưng yêu cầu trình duyệt phải có một cặp khóa SSL client được cài đặt và cho máy chủ biết định danh đó có ý nghĩa gì và triển khai phức tạp hơn một chút.)

Ở phía máy chủ, hãy sử dụng Spring Security để làm cho nó dễ dàng xử lý tất cả những thứ này. Nó hoạt động tốt với Spring MVC.

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