OAuth2 token Request Body vs Request Header

92 lượt xem

profile picture

Ẩn danh

Ngày 19 tháng 06 năm 2023

Em là sinh viên đang chuẩn bị để làm BE. E có câu hỏi như sau: Em đang build chức năng login bằng mạng xã hội từ backend. OAuth2 access & refresh token thì bạn của e bảo sẽ chuyển bằng server sang cho em Nhưng e ko biết là nên nhận data body hay header? Hình như là nếu chỉ xét đơn giản về mặt bảo an thì header có vẻ ok hơn, nhưng thực tế thì body với header khác nhau thế nào thì e vẫn chưa rõ lắm. Hi vọng mn chỉ giúp em

Đánh giá câu hỏi ngay!

Hãy ấn Up Vote với những câu hỏi cụ thể và chi tiết

Hãy ấn Down Vote với những câu hỏi chưa rõ ràng Careerly sẽ nhắc người hỏi chỉnh sửa lại.

1 câu trả lời

BEST

Ảnh đại diện của Kien Dinh

Chào bạn, Header hay Body đều là 2 thành phần của một HTTP Request. Nhưng chúng có các điểm khác biệt sau đây: 🧄 Request Header Đây là meta-data của các request, có thể hiểu nôm na đó là những thông tin có thể dùng cho mọi request của domain API nào đó. Ví dụ: - Content-Type: Xác định loại dữ liệu của request/response là JSON hay XML… - Cookie - Cache-control - API Key - Authorization - Vân vân và mây mây... 🥑 Request body Request body thông thường sẽ sử dụng với các phương thức POST/PUT/PATCH. (Nếu chưa rõ các phương thức RESTful thì có thể tham khảo bài viết này: https://careerly.vn/comments/5099?utm_campaign=self-share) Các API theo quy chuẩn thường sẽ đưa dữ liệu liên quan logic nghiệp vụ vào phần body. Ví dụ: Bạn có một bộ API liên quan tới giỏ hàng: - GET: /api/orders/{id} - POST: /api/orders/ : Tạo đơn hàng - PATCH: /api/orders/{id}: Chỉnh sửa đơn hàng Trong 3 API trên, bạn sẽ luôn cần thông tin xác thực cho cả 3 đơn hàng, vì vậy chúng ta sẽ đưa các thông tin chung như Cookie hoặc Content-type vào header. Bù lại các thông tin về đơn hàng như tên, id, số lượng sản phẩm… thì sẽ được đưa vào BODY. 🍳 Quay trở lại câu hỏi của bạn. Mình hiểu trường hợp của bạn là đang tiếp nhận token từ một bên thứ 3. Và ở đây thì token của bạn đang có vai trò như một nội dung của logic nghiệp vụ (chức năng đăng nhập), vì vậy bạn nên đưa token vào BODY và xử lý nó ở trong controller (nếu theo mô hình MVC), vì sẽ có khả năng bạn cần gọi các service nghiệp vụ khác nữa. Trong trường hợp khác, nếu token được gửi lên từ client, mà mục đích chính của API Endpoint đó không phải là xác thực (hành vi gửi token đi) thì nó nên nằm ở trong header bạn nhé, lúc này Backend sẽ xử lý token này trong Middleware. 🔒 Lưu ở đâu bảo mật hơn? Về phần bảo mật bạn có nhắc tới, thì thực tế là lưu ở đâu cũng như nhau cả, http header sẽ có thể bị web-proxy thay đổi, tuy nhiên nếu bạn sử dụng kết nối HTTPS thì nó sẽ được mã hoá và web-proxy sẽ không còn sửa nó được nữa. Và một điểm lưu ý khác, là việc chỉ lưu data vào BODY sẽ tiện hơn cho server trong trường hợp BODY có payload nặng, việc phải load nguyên cục BODY chỉ để lấy token và xác thực sẽ rất ảnh hưởng hiệu năng. Tham khảo bài viết về HTTPS: https://viblo.asia/p/https-la-gi-giai-thich-chi-tiet-ssltls-bang-chuyen-tinh-cho-va-meo-2oKLn2Q1LQO

Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!

Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.

Xem thêm

Đồng ý với Điều khoản dịch vụ Chính sách bảo mật của Careerly

Bạn đã có tài khoản rồi?

Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!

Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.