Tôi đặc biệt quan tâm đến cách người dùng thực hiện các hoạt động được ủy quyền / xác thực trên API web.
Các cookie xác thực có tương thích với triết lý REST không, và tại sao?
Tôi đặc biệt quan tâm đến cách người dùng thực hiện các hoạt động được ủy quyền / xác thực trên API web.
Các cookie xác thực có tương thích với triết lý REST không, và tại sao?
Câu trả lời:
Dịch vụ ReSTful lý tưởng cho phép khách hàng (có thể không có trong trình duyệt) thực hiện bất kỳ tác vụ cần thiết nào trong một yêu cầu ; bởi vì trạng thái đầy đủ cần thiết để làm điều đó được giữ bởi máy khách, không phải máy chủ. Vì máy khách có toàn quyền kiểm soát trạng thái, nó có thể tự tạo trạng thái (nếu điều đó là hợp pháp) và chỉ nói chuyện với API để "hoàn thành công việc".
Yêu cầu cookie có thể làm cho điều đó khó khăn. Đối với khách hàng ngoài trình duyệt, việc quản lý cookie là một bất tiện khá lớn so với thông số truy vấn, tiêu đề yêu cầu đơn giản hoặc nội dung yêu cầu. Mặt khác, trong trình duyệt, sử dụng cookie có thể làm cho nhiều việc đơn giản hơn nhiều.
Vì vậy, API trước tiên có thể tìm trong Authorization
tiêu đề cho dữ liệu xác thực mà nó cần, vì đó có thể là nơi mà các máy khách không có trình duyệt sẽ thích đặt nó, nhưng để đơn giản hóa và hợp lý hóa các máy khách dựa trên trình duyệt, nó cũng có thể kiểm tra cookie phiên cho đăng nhập phía máy chủ, nhưng chỉ khi Authorization
tiêu đề thông thường bị thiếu.
Một ví dụ khác có thể là một yêu cầu phức tạp thường yêu cầu nhiều tham số được đặt. Một khách hàng không tương tác sẽ không gặp khó khăn khi kẹt tất cả dữ liệu đó vào một yêu cầu, nhưng giao diện dựa trên biểu mẫu HTML có thể thích chia yêu cầu thành nhiều trang (giống như một tập các trang 'wizard') để người dùng không trình bày với các tùy chọn không áp dụng được dựa trên các lựa chọn trước đó. Tất cả các trang trung gian có thể lưu trữ các giá trị trong cookie phía máy khách, do đó chỉ có trang cuối cùng, nơi người dùng thực sự gửi yêu cầu, có bất kỳ tác dụng phụ nào của máy chủ. API có thể tìm kiếm các thuộc tính cần thiết trong thân yêu cầu và quay lại xem cookie nếu các tham số cần thiết không có ở đó.
Chỉnh sửa: trong RE để bình luận của @ Konrad bên dưới:
Mã thông báo so sánh khó thực hiện hơn đặc biệt là vì bạn không thể dễ dàng vô hiệu hóa mã thông báo mà không lưu trữ chúng ở đâu đó.
er ... bạn đang xác nhận cookie ở phía máy chủ, phải không? Chỉ vì bạn đã nói với trình duyệt loại bỏ cookie sau 24 giờ không có nghĩa là nó sẽ như vậy. Cookie đó có thể được lưu bởi người dùng có kỹ thuật cao và được sử dụng lại rất lâu sau khi nó "hết hạn".
Nếu bạn không muốn lưu trữ dữ liệu phiên ở phía máy chủ, bạn nên lưu trữ nó trong mã thông báo (cookie hoặc cách khác). Mã thông báo auth tự chứa đôi khi được gọi là Macaroon. Làm thế nào điều này được truyền giữa máy khách và máy chủ (cho dù bằng cookie, như các tiêu đề bổ sung hoặc trong chính thực thể yêu cầu) hoàn toàn độc lập với chính cơ chế xác thực.
HttpClient
.NET, bạn có thể sử dụng cookie mà không gặp vấn đề gì và bạn không thực sự cần phải suy nghĩ về nó. Mã thông báo so sánh khó thực hiện hơn đặc biệt là vì bạn không thể dễ dàng vô hiệu hóa mã thông báo mà không lưu trữ chúng ở đâu đó.
curl
hoặc wget
, việc quản lý cookie khá bất tiện và bạn thực sự phải nghĩ về chúng một loạt. Tôi đã trả lời điểm khác của bạn bằng cách chỉnh sửa câu trả lời của tôi.
Có và Không - Phụ thuộc vào cách bạn sử dụng nó.
Cookies nếu được sử dụng để duy trì trạng thái máy khách tại máy khách, cho khách hàng, của khách hàng và bởi khách hàng thì họ sẽ yên tâm.
Nếu bạn đang lưu trữ trạng thái máy chủ vào cookie thì về cơ bản, bạn chỉ cần chuyển tải sang máy khách - không ổn định.
Vậy một số ví dụ là gì?
Yên tĩnh:
Không nghỉ ngơi:
Sự yên tĩnh đến từ trạng thái không trạng thái - của máy chủ. Khách hàng có thể duy trì trạng thái ứng dụng và gửi nó đến máy chủ để nói họ đang ở đâu để máy chủ có thể quyết định nơi sẽ đi từ đó. Về cơ bản các phiên / trạng thái cần dữ liệu lịch sử và phụ thuộc vào các yêu cầu trong quá khứ, có thể nói, các ứng dụng yên tĩnh không lý tưởng (Không thể có ứng dụng hoàn toàn yên tĩnh 100% nếu bạn sắp có màn hình đăng nhập :)
Người ta có thể sử dụng cookie. REST cho phép họ.
REST yêu cầu bất kỳ thông tin phiên nào được lưu trữ ở phía máy khách, nhưng khi xác thực, một số thông tin phải ở lại phía máy chủ vì lý do bảo mật.
Từ một trong blog của tôi viết , có một thỏa thuận chung rằng dữ liệu xác thực được coi là ra khỏi phạm vi liên quan đến REST. Do đó, các máy chủ có thể giữ một số dữ liệu phiên này ở bên họ.