2013-03-18 50 views
7

Tôi có một số câu hỏi:Node.js xác thực api REST và OAuth2

1) Có một thực hành tốt để sử dụng API REST cả cho sử dụng API bên ngoài và như là một phía máy chủ cho một xương sống (hoặc js đồng bằng) frontend ? Tôi nghĩ việc mã hóa một máy chủ API REST dễ dàng hơn và sử dụng nó như một phụ trợ.

2) Nếu tôi viết xác thực ứng dụng web của mình với tiêu chuẩn oauth 2, đây có phải là cách hay để lưu trữ mã thông báo bí mật của tôi trong cookie không? Tôi nghĩ rằng điều này sẽ gây ra lỗ hổng CSRF.

Khi tôi thấy passport.js sử dụng cookie để lưu trữ mã thông báo bí mật, chẳng hạn như Facebook hoặc twitter ... Còn CSRF thì sao?

Trả lời

11

Đây là một câu hỏi rất thú vị, tôi rất ngạc nhiên khi chưa có ai trả lời.

1) Đối với câu hỏi đầu tiên, câu trả lời của tôi chắc chắn là ! Bạn không muốn viết 2 lần logic API.

Điều bạn có thể làm là sử dụng các URL khác nhau.

Ví dụ: Đối với api công khai, bạn sử dụng http://api.domain.com/objects/ trong khi liên quan đến nội bộ, bạn có thể sử dụng http://domain.com/api/objects/ hoặc bất kỳ thứ gì bạn muốn.

Sau đó, bạn sử dụng cùng một logic, nhưng với các chiến lược xác thực khác nhau. Công khai với mã thông báo xác thực, giống như nhiều API phổ biến (Twitter, Facebook, v.v.) và Private API sử dụng nhật ký của passport.js.

Những điều tốt về tách là:

  • Bạn tách vấn đề an ninh
  • Bạn có thể kiểm soát băng thông truy cập nếu ứng dụng của bạn chuyển rất nhiều dữ liệu (và bạn muốn đưa ra một ưu tiên cao hơn cho bạn ứng dụng. .. cũng có thể!)
  • Hoặc đơn giản là bạn có thể kiểm soát uỷ quyền (Ví dụ. không DELETE qua API công cộng)

2) tôi không phải là một guru an ninh, nhưng tôi sẽ hộ chiếu chắc chắn tin tưởng. hệ thống xác thực js, vì nó được sử dụng rộng rãi khi sử dụng nút làm phụ trợ.

Bạn có thể tham khảo cho câu hỏi này để thực hiện CSRF an ninh trong nhanh: How to implement CSRF protection in Ajax calls using express.js (looking for complete example)?

Hoặc chiến lược khác là sử dụng một thẻ refresh nếu bạn sử dụng FB hay Twitter kết nối chiến lược.

Hy vọng điều đó sẽ hữu ích.

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