2011-08-26 59 views
7

Tôi đang xây dựng một API REST trong asp.net mvc. Hệ thống của tôi sử dụng xác thực biểu mẫu. Tên người dùng/mật khẩu hoặc openId/fbconnect, v.v. Nếu tôi có thuộc tính [Authorize] trên một hành động, ứng dụng Android hoặc ứng dụng dành cho máy tính để bàn có thể truy cập vào phương thức như thế nào?Xác thực bằng REST API

Hoặc câu hỏi hay hơn là, tôi sẽ thiết kế ứng dụng dành cho máy tính để bàn để xác thực như thế nào? Tôi có cần phải vượt qua một khóa API hoặc một số mã thông báo của một số loại? Hoặc ứng dụng dành cho máy tính để bàn có hoạt động giống như trình duyệt và sử dụng cookie nội bộ không? Tôi không hoàn toàn chắc chắn làm thế nào một RESTful API sẽ làm việc bên ngoài của một trình duyệt web với xác thực.

Trả lời

14

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 ChromecURL. 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.

+0

+1 cho Bảng điều khiển REST dành cho Google Chrome, đề cập đến :) Tốt nhất! –

+1

'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

+0

@ 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

1

Hãy xem qua chương trình xác thực AWAZ của Amazon. Nó làm những gì mà hầu hết mọi người đều muốn và nó sử dụng tiêu đề HTTP Authorization tiêu chuẩn.

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