2012-10-30 41 views
17

Tôi khá mới đối với API REST và tôi nhận thấy có khá nhiều câu hỏi đã được đăng. Tuy nhiên, perusing những đã thực sự khiến tôi bối rối hơn về cách xử lý này.Bảo mật API REST và Khung công tác mỏng

Tôi đã tạo một API REST bằng cách sử dụng Slim Framework mà tôi chỉ đơn giản là sử dụng để chuyển dữ liệu. Tôi sẽ không sử dụng thông tin đăng nhập hoặc xác thực người dùng, vì vậy tôi tin rằng để đảm bảo điều này, tôi chỉ cần một hệ thống sử dụng khóa công cộng và khóa riêng, nhưng tôi không chắc chắn.

Nếu có ai có thông tin chi tiết về cách chính xác/an toàn nhất để thực hiện việc này hoặc bất kỳ hướng dẫn/tài nguyên nào tuyệt vời. Bất kỳ trợ giúp được đánh giá cao.

+0

Thông tin chi tiết về cách an toàn nhất ... để làm * những gì *? Bạn đang cố gắng để thực hiện? Bạn muốn "bảo mật nó". Điều đó nghĩa là gì? Mục tiêu là gì? Bạn có muốn chỉ cho phép người dùng đáng tin cậy truy cập không? Bạn có muốn mã hóa dữ liệu khi chuyển tiếp không? Bạn có muốn chỉ cho phép một lần sử dụng cho mỗi khách hàng không? v.v ...Bạn nói rằng bạn muốn "bảo mật điều này" nhưng bạn không muốn sử dụng xác thực. Bạn sẽ cần phải cụ thể hơn sau đó, như những gì nó có nghĩa là "an toàn này." – Cheeso

+1

API sẽ được gọi từ các trang web khác nhau, nhưng người dùng sẽ không có ý tưởng rằng nó ở đó, vì nó chỉ đơn giản được sử dụng để truy xuất dữ liệu trên chương trình phụ trợ. Mục tiêu của tôi là gọi an toàn api này từ mã cũng như mã hóa dữ liệu. – Drew

Trả lời

15

Bạn có thể sử dụng SSL để mã hóa dữ liệu khi chuyển tiếp.

Nhưng SSL chỉ là mã hóa; ssl phía máy chủ không thực hiện xác thực của máy khách, cũng như không cho phép. Bạn có thể nghĩ đến việc ủy ​​quyền khi trả lời câu hỏi là người gọi có được phép làm những gì anh ta yêu cầu không?. Xác thực thiết lập danh tính của người gọi hoặc Xác thực thường là bước đầu tiên cần thiết để thực hiện ủy quyền. Đôi khi bạn không cần "toàn bộ danh tính" - bạn chỉ cần xác định một khía cạnh cụ thể. Ví dụ: cổng nhà vệ sinh tự động sẽ không cần biết người mà bạn đã là, nhưng chỉ khi bạn là nam hoặc nữ để xác định danh tính. Trong cùng một cách, một số dịch vụ không quan tâm bạn là ai; họ sẽ cho phép truy cập nếu bạn đang gọi từ một mạng cụ thể (danh sách trắng ip) hoặc nếu bạn mang theo một mã thông báo đặc biệt.

Để cho phép máy chủ để phân biệt giữa các cuộc gọi có thẩm quyền và trái phép bạn có một số lựa chọn:

  • IP danh sách trắng. Nếu bạn biết địa chỉ IP của ứng dụng hoặc tác nhân sẽ gọi dịch vụ của bạn, bạn có thể chỉ định địa chỉ đó trong quá trình triển khai dịch vụ của mình. Dịch vụ có thể kiểm tra IP của các yêu cầu gửi đến và từ chối các yêu cầu không có trong danh sách trắng. Đây là loại ủy quyền "ẩn" dựa trên địa chỉ của người gọi.

  • mã bí mật mà ứng dụng cung cấp trong mỗi cuộc gọi. Bạn nói rằng bạn không muốn làm xác thực, nhưng đây là một hình thức xác thực. Bạn có thể gọi nó là "mã thông báo mang". Bất kỳ ai mang mã thông báo này đều được ủy quyền. Trong máy chủ của bạn, bạn sẽ kiểm tra giá trị của mã thông báo và từ chối mọi cuộc gọi không khớp với giá trị nổi tiếng. Điều này hoạt động giống như danh sách trắng IP ngoại trừ mã thông báo được chuyển rõ ràng và không có bất kỳ mối quan hệ nào với địa chỉ mạng.

  • một cặp khóa + mã thông báo. Điều này giống như tên người dùng/mật khẩu, nhưng nó có thể được sử dụng để xác thực ứng dụng. Sử dụng điều này để cung cấp danh tính của ứng dụng. Kiểm tra về phía dịch vụ như trên.

  • tên người dùng/mật khẩu. Để xác thực người dùng ứng dụng.

Bạn có thể muốn kết hợp những thứ này để tạo ra giải pháp bạn muốn. Nói cách khác, yêu cầu của khách hàng cần phải từ đúng địa chỉ của tôi và cần có mã thông báo/khóa cho ứng dụng và tên người dùng/mật khẩu cho người dùng, để được coi là "được ủy quyền".

+0

Cảm ơn Cheeso vì phản ứng tuyệt vời. Nó sẽ mất một thời gian để tôi thực hiện tất cả những điều này nhưng điều này chắc chắn đã gửi cho tôi xuống con đường. – Drew

+0

@ Cheeso, tóm tắt hay. Bạn có bất kỳ ví dụ triển khai nào, các ý tưởng để bắt đầu với triển khai của riêng mình không vì một API REST cơ bản đã được thiết lập và đang chạy ... –

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