2010-03-12 30 views
9

Giả sử tôi có một trang web có nhiều thông tin về các sản phẩm của chúng tôi. Tôi muốn một số khách hàng của chúng tôi (bao gồm cả chúng tôi!) Có thể tìm kiếm các sản phẩm của chúng tôi theo nhiều phương pháp khác nhau, bao gồm:Thực tiễn tốt nhất cho API an toàn?

1) Kéo dữ liệu từ cuộc gọi AJAX trả về dữ liệu theo cách mát mẻ, JavaScripty-way 2) Tạo các ứng dụng iPhone sử dụng dữ liệu đó; 3) Có các ứng dụng web khác sử dụng dữ liệu đó để tự kết thúc.

Thông thường, tôi chỉ cần tạo một API và được thực hiện với nó. Tuy nhiên, dữ liệu này thực tế là bí mật - có nghĩa là chúng tôi không muốn đối thủ cạnh tranh của mình có thể tìm kiếm tất cả các sản phẩm của chúng tôi mỗi buổi sáng và sau đó tự động đặt giá để cắt giảm chúng tôi. Và chúng tôi cũng muốn có thể xem ai có thể lạm dụng hệ thống, vì vậy nếu ai đó thực hiện mười triệu cuộc gọi phức tạp tới API của chúng tôi mỗi ngày và bogging xuống máy chủ của chúng tôi, chúng tôi có thể cắt giảm chúng.

Bước hợp lý tiếp theo của tôi là tạo khóa của nhà phát triển để hạn chế quyền truy cập - điều này sẽ hoạt động tốt cho các ứng dụng web nhưng không quá nhiều đối với bất kỳ cuộc gọi AJAX nào. (Như tôi thấy, họ cần phải cung cấp khóa trong JavaScript, đó là trong văn bản rõ ràng và dễ dàng nhìn thấy, và do đó thực sự không có bảo mật nào cả. Đặc biệt nếu chúng ta muốn sử dụng các khóa của nhà phát triển riêng của chúng tôi trên trang web của chúng tôi để thực hiện các cuộc gọi AJAX này.)

Vì vậy, câu hỏi của tôi: sau khi xem xét Oauth và OpenID một thời gian, tôi không chắc có giải pháp nào có thể xử lý cả ba điều trên. Có một số loại "thực hành tốt nhất" kinh điển cho các khóa của nhà phát triển, hoặc Oauth và OpenID có thể xử lý các cuộc gọi AJAX dễ dàng trong một thời trang nào đó mà tôi chưa biết, hay tôi thiếu cái gì đó hoàn toàn?

Trả lời

4

Tôi nghĩ rằng OAuth 2 chân là những gì bạn muốn thỏa mãn # 2 và # 3. Đối với # 1 tôi sẽ đề nghị rằng thay vì khách hàng đưa ra các yêu cầu JS trực tiếp đối với ứng dụng của bạn, họ có thể thay thế các yêu cầu đó thông qua ứng dụng web của riêng họ.

+0

Nhưng làm thế nào máy chủ proxy API này có thể được bảo vệ để ngăn người tấn công lạm dụng nó? – Constantin

1

Giải pháp giữa chừng là yêu cầu khóa API; và sau đó yêu cầu bất cứ ai sử dụng nó không thực sự sử dụng nó trực tiếp với AJAX; nhưng quấn cuộc gọi của họ trong một yêu cầu phía máy chủ, ví dụ:

AJAX -> customer server -> your server -> customer server -> user 

Tạo một API PHP đơn giản cho các bên liên quan không nên quá khó khăn, và các ứng dụng iPhone của riêng bạn rõ ràng sẽ cắt ra người đàn ông trung, vận chuyển với khóa API của riêng họ.

+0

Phải có cách để làm điều đó - Google Analytics không làm điều này bằng cách cho phép bạn dán một số JS ngay vào trang của bạn và bằng cách nào đó làm cho cuộc gọi API an toàn đó? Tôi tự hỏi làm thế nào họ làm điều này. –

1

OAuth và OpenID ít có khả năng liên quan trực tiếp đến các cuộc gọi AJAX. Nhiều khả năng, bạn sẽ có một số loại bộ lọc ủy quyền ở phía trước trình xử lý AJAX của bạn để kiểm tra cookie và có thể cookie đó được đặt là kết quả của xác thực OpenID.

Có vẻ như đây là câu hỏi về "how do I prevent screen scraping". Nếu chỉ có khách hàng đăng nhập mới có thể xem giá, đó là một điều, nhưng giả sử bạn giống như hầu hết các trang web bán lẻ và hàng rào của bạn để đăng ký khách hàng càng thấp càng tốt, điều đó không thực sự hữu ích.

Và, hey, nếu giá của bạn không phải là khả dụng, bạn sẽ không hiển thị trong các công cụ tìm kiếm như Froogle hoặc Nextag hoặc PriceGrabber. Nhưng đó là một quyết định chiến lược kinh doanh hơn, chứ không phải là quyết định lập trình.

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