Tôi sẽ không sử dụng cookie trong API REST. FormsAuthentication là một phương pháp dựa trên cookie. Thay vào đó, người gọi phải cung cấp bằng chứng xác thực với mọi yêu cầu trong tiêu đề hoặc dưới dạng tham số yêu cầu. Ví dụ: bạn có thể sử dụng Xác thực cơ bản để truyền tên người dùng và mật khẩu hoặc thêm tiêu đề xác thực tùy chỉnh với một số mã thông báo truy cập được mã hóa (không phải là rất RESTful). Bạn cũng có thể triển khai OAuth, trong đó người yêu cầu sẽ cung cấp mã thông báo truy cập với mọi yêu cầu.
Tôi muốn viết AuthorizeAttribute
tùy chỉnh để thực hiện xác thực trong mã của bạn, điều đó mang lại cho bạn nhiều quyền kiểm soát. Ngoài ra, bạn có thể sử dụng một lớp cơ sở điều khiển và ghi đè phương thức OnAuthorization
.
API không được cung cấp thách thức mật khẩu: Trong ứng dụng web, yêu cầu trái phép thường sẽ chuyển hướng người dùng đến trang đăng nhập. Trong API, yêu cầu sẽ chỉ trả lại mã lỗi. Giờ đây, công việc của ứng dụng khách để thách thức người dùng thông qua một hộp thoại, nếu có. Trong ứng dụng dành cho thiết bị di động, bạn có thể muốn hiển thị hộp thoại. Trong ứng dụng web có OAuth, có thể bạn muốn chuyển hướng đến máy chủ xác thực.
Nếu bạn muốn kiểm tra API REST của mình, tôi khuyên bạn nên sử dụng REST Console for Google Chrome và cURL. Trước đây là dễ dàng hơn cho người mới bắt đầu và đi kèm với một giao diện đẹp trong khi cURL cung cấp cho bạn nhiều hơn độ trung thực và rất nhiều giao thức.
EDIT
Một lưu ý hơi pedantic: Một số API, ngay cả những nhà cung cấp khá lớn, ví dụ Twitter, trả về 401
mã trạng thái theo thời gian, thường bỏ qua tiêu đề (bắt buộc) WWW-Authenticate
vì đó không phải là ý định của họ để thách thức khách hàng.
+1 cho Bảng điều khiển REST dành cho Google Chrome, đề cập đến :) Tốt nhất! –
'Tôi sẽ không sử dụng cookie trong API REST' - Đồng ý, tuy nhiên, bạn có thể sử dụng nó để tạo mã thông báo an toàn như trong [câu trả lời này] (http://stackoverflow.com/questions/840537/generating-cryptographically- mã xác thực an toàn # 858724). – James
@ James: đó là một điểm rất tốt. Nó chắc chắn là tốt hơn để sử dụng một mã thông báo thay vì gửi tên người dùng và mật khẩu xung quanh tất cả các thời gian, bởi vì nó dễ dàng hơn để cô lập mã boilerplate theo cách đó. – mnemosyn