2014-10-08 22 views
6

Tôi có một câu hỏi về apis yên tĩnh và an ninh trong một môi trường đa người thuê ::còn lại api đa thuê bao an ninh

Hãy tưởng tượng bạn có một thiết bị đầu cuối: api/chi nhánh /: branchId/tài khoản /: AccountID

Xác thực được thực hiện thông qua Mã thông báo vòng đệm (oauth2). Mỗi mã thông báo bao gồm một tập hợp các xác nhận quyền sở hữu liên quan đến người dùng đang gọi. Khiếu nại branchId được bao gồm trong mã thông báo và mỗi người dùng thuộc về một chi nhánh.

Các hạn chế bảo mật như sau:

  1. Các branchId của yêu cầu GET phải phù hợp với một lưu trữ trên các tuyên bố token.
  2. accountId phải là tài khoản hợp lệ bên trong chi nhánh được xác định bởi branchId.

Câu hỏi đặt ra là: giải pháp nào sau đây là chính xác?

  1. Duy trì điểm cuối: api/branches /: branchId/accounts /: accountId. Và thực hiện các kiểm tra bảo mật bắt buộc.
  2. Thay đổi điểm cuối thành: api/accounts /: accountId, lấy branchId từ mã thông báo và sau đó thực hiện kiểm tra bảo mật còn lại.

Ứng dụng này có nghĩa là trở thành người thuê nhiều người. Mỗi nhánh là một đối tượng thuê, và mỗi người dùng chỉ có thể truy cập thông tin liên kết với nhánh đơn của nó. Cảm ơn!

+0

+1, câu hỏi tuyệt vời! tò mò muốn biết câu trả lời cũng như –

+0

@DevarshDesai Tôi cần phải hành động về điều này, vì vậy dưới đây tôi đã nhận xét về quá trình hành động của tôi. Xin vui lòng cho tôi biết những gì bạn nghĩ. – Joe

Trả lời

2

Tôi cần đưa ra quyết định nhanh, vì vậy Tôi sẽ sử dụng giải pháp 1. Nếu ai có tranh luận chống lại hoặc ủng hộ, hãy tham gia cuộc trò chuyện.

luận cứ ủng hộ:

  1. Tôi hoàn toàn đồng ý với câu trả lời này: https://stackoverflow.com/a/13764490/2795999, sử dụng URL đầy đủ cho phép bạn quyết định hiệu quả hơn mà lưu trữ dữ liệu để kết nối với, và phân phối tải cho phù hợp.
  2. Ngoài ra, bạn có thể dễ dàng triển khai bộ nhớ đệm và ghi nhật ký vì url đầy đủ đủ mô tả.
  3. Tính độc lập về bảo mật và API. Hôm nay tôi đang sử dụng OAuth2 nhưng có lẽ ngày mai tôi có thể gửi chữ ký yêu cầu và vì URL có tất cả thông tin để đáp ứng yêu cầu, nó sẽ hoạt động.

Lập luận chống lại:

  1. Thông tin dư thừa: các branchId là trên URL và mã hóa trên token.
  2. Một chút nỗ lực để triển khai.
+0

Hey Joe, hy vọng bạn đã có một tuần tốt lành! Tôi đồng ý với bạn và câu trả lời của Mark về câu trả lời khác của S.O; Tôi nghĩ rằng có URL mô tả này không có lợi thế cho bộ nhớ đệm (có thể có lợi ích to lớn bất kể số lượng người dùng bạn đang phục vụ); như đối với dự phòng thông tin; có lẽ điều đó có thể giúp ích cho bạn (như một phương tiện kiểm tra 2 cách khác nhau mà yêu cầu đó là chính xác), nhưng tất cả trong tất cả, bạn dường như có một thiết kế API tuyệt vời. Xin vui lòng cho tôi biết những trở ngại bạn phải đối mặt trong quá trình thực hiện và những bài học bạn đã đi với! Cảm ơn bạn đã dành thời gian! : 0) –

+0

@DevarshDesai Cảm ơn phản hồi của bạn, đã triển khai giải pháp 1) hãy xem nó như thế nào. Tất nhiên tôi có thể đăng một số cập nhật! Tốt. – Joe