2013-05-12 21 views
6

Trên hệ thống dựa trên REST, các tùy chọn để "mã hóa" tài nguyên ID là gì.REST Security Thiết kế thực hành tốt khi trưng ra nguồn lực ID

Ví dụ:

/client/2 

sẽ có thể truy cập tại

/client/SOMEHASHKEY 

Tôi đang nghĩ đến:

1 - Có bảng DB mà theo dõi một ID tài nguyên và nó HASH tương ứng và xem xét mọi yêu cầu. Điều này rõ ràng có vẻ khá nặng để thực hiện, và tăng công việc máy chủ khá một chút.

2 - Có một số loại thuật toán mã hóa nội bộ mà sẽ tạo ra một hash ví dụ dựa trên ngày tạo nguồn lực, ID nguồn lực và base64 nó (Rõ ràng là không tối ưu nhưng bạn sẽ có được điểm)

Vì vậy, đang có thực hành tốt cho loại kịch bản này? Bạn muốn giới thiệu gì?

Nhiều Cảm ơn

Trả lời

2

Nếu mục đích của bạn là để làm cho nó khó có thể đoán id khách hàng, sau đó sử dụng uuids, ví dụ 32 ký tự hex dài guids như 21EC2020-3AEA-1069-A2DD-08002B30309D.

Xác định thực thể trong một miền hoàn toàn phụ thuộc vào việc triển khai cung cấp dịch vụ REST.

Một số ứng dụng sử dụng trình theo mặc định để xác định các thực thể. Một ví dụ điển hình là ví dụ lovefilm API:

GET /users/9D48675C-096F-11DC-BF5A-88D01745CE5C HTTP/1.1 
Host: openapi.lovefilm.com 

Tuy nhiên, sử dụng khó đoán định không bảo vệ bạn khỏi những truy cập trái phép và không thay thế cho một cơ chế xác thực thực.

+0

hum vì vậy nếu tôi có câu trả lời của bạn và cố gắng áp dụng nó cho câu hỏi của tôi bạn có nghĩa là sử dụng bảng để theo dõi corespondance giữa Hash, GUID hoặc bất cứ điều gì và các nguồn lực thực tế? – silkAdmin

+0

Nó phụ thuộc vào cách ứng dụng của bạn lưu trữ tài nguyên. Tôi không có ý tưởng làm thế nào nguồn tài nguyên trông giống như bên trong của ứng dụng. Nhưng có, nếu bạn phải dính vào số nguyên ids nội bộ, sau đó thêm một tài sản guid để mô hình khách hàng của bạn. Nếu lưu trữ của bạn là một bảng SQL DB, sau đó lưu trữ các guid trong một trường bổ sung của bảng khách hàng. – stmllr

+0

để đưa chúng ta trở lại câu hỏi "thực hành tốt", tôi đoán điểm của bạn là tôi nên lập chỉ mục một UUID trên chính bảng tài nguyên? – silkAdmin