2011-11-25 28 views
23

Các OAuth 2.0 dự thảo v2-22 Phần 3.2 nói:Khách hàng có nên nhận mã thông báo truy cập OAuth 2 bằng GET hoặc POST không?

khách hàng phải sử dụng HTTP "POST" phương pháp khi thực hiện access token yêu cầu.

Tuy nhiên, nếu bạn xem triển khai FacebookFoursquare OAuth2, họ yêu cầu khách hàng thực hiện yêu cầu GET đơn giản để yêu cầu mã thông báo truy cập. Họ yêu cầu khách hàng đặt client_id và client_secret trong URL.

Tôi đang xây dựng một máy chủ OAuth 2 và sau khi nhìn thấy triển khai của Facebook và Foursquare, tôi cũng đang cân nhắc việc phá vỡ giao thức để cho phép khách hàng yêu cầu mã thông báo truy cập qua GET. Giao tiếp của trang web của tôi đang sử dụng SSL, tương tự như Facebook và Foursquare. Vì vậy, câu hỏi của tôi là: Có lý do chính đáng nào khiến tôi không cho phép khách hàng yêu cầu mã thông báo truy cập thông qua phương thức GET qua HTTPS không? Không.

Trả lời

9

Lý do phổ biến nhất là bạn không nên đặt thông tin nhạy cảm trong chuỗi truy vấn (tham số GET) vì máy chủ web thường ghi lại URL yêu cầu HTTP. Dữ liệu POST có thể dài tùy ý, vì vậy thường không được ghi lại. Vì vậy, khi bạn đang xử lý một cái gì đó như client_secret hoặc mã (mặc dù nó là một thời gian sử dụng), nó có ý nghĩa để có được thông qua trong tải trọng POST.

IMHO, nếu bạn đang sử dụng luồng OAuth 2.0 không yêu cầu client_secret (hoặc bạn đặt tiêu đề đó trong tiêu đề Cấp phép HTTP, như được đề xuất) - Tôi không thấy vấn đề với việc cho phép GET.

+0

Điểm tốt về nhật ký máy chủ, nhưng đối với Oauth2, chúng tôi lưu trữ client_id và client_key trong văn bản thuần túy trên máy chủ của chúng tôi, vì vậy nếu thông tin này nằm trong nhật ký máy chủ của chúng tôi thực sự tệ hơn nhiều so với cơ sở dữ liệu của chúng tôi? – Spike

+0

Đồng ý - tương tự như vậy. Nếu máy chủ web và OAuth AS của bạn đều nằm dưới sự kiểm soát của bạn - không có vấn đề lớn nào cho phép GET IMHO. –

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