2013-04-07 37 views
12

Tôi có một REST API đơn giản (sử dụng khuôn khổ Slim) thiết lập nơi người dùng có thể gọi một trang như thế này:API bí mật khách hàng với REST Sử dụng Slim Khung

subdomain.domain.com/api/musician/id/3273 

để lấy và hiển thị một số dữ liệu JSON đơn giản .

Tôi muốn thêm một số xác thực vào điều này để chỉ những người dùng có một số loại ID khách hàng (ở mức tối thiểu) mới có thể truy cập dữ liệu này. Tôi muốn người dùng có thể truyền thông tin bí mật/id của khách hàng của họ trong URL, nhưng tôi muốn rút thông tin này ra mà không cần phải xử lý cấu trúc REST quá nhiều.

Có khung hoặc thư viện nhất định nào đặc biệt hiệu quả để đạt được điều này không?

+0

Một số dịch vụ API yêu cầu bạn gửi những thứ như một client_id trong tiêu đề của yêu cầu. Bạn là người dùng có thể sử dụng cURL để thêm tiêu đề tùy chỉnh vào các yêu cầu của họ mà bạn có thể truy cập trong tập lệnh của mình. – Xeoncross

Trả lời

8

Tôi cũng gặp vấn đề này trong một thời gian, tôi cũng có câu hỏi không có câu trả lời về chủ đề này (ở đây).

Về cơ bản, lựa chọn của bạn là OAuth hoặc tùy chỉnh. Bây giờ, đối với oauth, họ đang làm việc trên phiên bản 2.0 và bạn không nên bắt đầu một dự án mới bằng OAuth 1, nhưng vấn đề là, oauth2 sắp hoàn thành và có rất ít sự hỗ trợ cho máy chủ oauth2 cho php ngay bây giờ. Tôi không muốn nói rằng oauth2 2 chân/3 chân là phức tạp, nhưng nó là nhiều hơn nó nên và cũng sau khi đọc rất nhiều bài viết về điều này, tôi quyết định rằng bây giờ, tôi nên đi với cái gì khác , không phải oauth (cũng là một trong những người sáng tạo oauth đã rời dự án vì anh ta không hài lòng với hướng dự án này đi) vì nó ở trạng thái "chưa quyết định" (tất nhiên mọi người sẽ cho rằng nó sẵn sàng để sử dụng, nhưng tôi không quan tâm, tôi muốn một cái gì đó đã được chứng minh, không muốn là một con chuột thí nghiệm cho các công ty lớn để kiểm tra oauth [có, oauth đi cho lợi ích công ty lớn, không phải của bạn]).

Dù sao, quay trở lại vấn đề của tôi, tôi luôn thích cách Amazon làm việc với api của họ, nó rất đơn giản để thực hiện, vậy tại sao không đi theo cùng một hướng? Ý tôi là, amazon là một trong những nhà cung cấp api lớn nhất hiện có, nếu họ sử dụng nó, họ có một lý do thực sự để làm như vậy.
Nói và thực hiện, trong chưa đầy 2 giờ tôi đã có giao thức xác thực/ủy quyền của tôi và chạy, và đoán cái gì, thật dễ dàng, đơn giản và tôi thích viết nó (không bị thất vọng vì oauth). Một bài viết hay đã giúp tôi bắt đầu là: http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ về cơ bản giải thích những gì bạn phải làm.

Vì vậy, nếu tôi là bạn, tôi sẽ bắt đầu từ đó :)

+5

bạn có liên kết bị hỏng –

1

Vì REST không có quốc tịch, bạn cần phải bán thịt nếu bạn muốn đại diện dữ liệu khác nhau cho người dùng khác nhau (ergo - stateful), nghĩa là với mỗi yêu cầu bạn sẽ cung cấp dữ liệu (về trạng thái người dùng) cho thực thể cụ thể.

Vì vậy, hãy xác thực người dùng mỗi lần hoặc cookie tạm thời + phiên hoặc nếu bạn có bên thứ ba tham gia, OAuth.

cũng Dave Ingram - API Design presentation

2

Xem lẽ đây có thể hữu ích slim HttpBasicAuth

Bạn có thể sử dụng HTTP auth cơ bản theo yêu cầu để xác nhận nếu người dùng đó làm theo yêu cầu là một người dùng hợp lệ.

5

Nếu khách hàng API của bạn không hành động "thay mặt" người dùng của bạn sau đó OAuth là quá mức cần thiết theo ý kiến ​​của tôi.

Khóa API chuẩn mà bạn có thể phát hành sẽ hoạt động. Bạn cũng có thể thêm chữ ký yêu cầu nếu cần.

Một số ví dụ Slim: herehere

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