Mã thông báo đã hết hạn - API JSON REST - Mã lỗi


83

Tôi có một API REST JSON. Có một cái bắt tay sẽ cung cấp cho bạn một mã thông báo có giá trị trong 15 phút. Tất cả các cuộc gọi bạn thực hiện trong vòng 15 phút đó sẽ hoạt động tốt. Sau 15 phút, tôi trả về một đối tượng lỗi (bao gồm mã, thông báo, thành công = sai) nhưng tôi cũng tự hỏi tôi nên trả lại Mã lỗi HTTP nào? Và việc sử dụng mã lỗi HTTP có làm rối một số máy khách nhất định không? (HTML5, iPhone, Android). Điều gì được coi là phương pháp hay nhất trong kịch bản này?


9
+1, câu hỏi hay. Bạn đã bao giờ tìm thấy một giải pháp tốt cho điều này? (btw - cả netflixlinkedin trả về 401).
Lasse Christiansen


@MichaelFreidgeim Câu hỏi này đã cũ hơn
FindOutIslamNow

@FindOutIslamNow, "Có thể trùng lặp" là một cách để làm sạch - để đóng các câu hỏi tương tự và giữ một câu có câu trả lời tốt nhất. Ngày không phải là điều cần thiết. Xem meta.stackexchange.com/questions/147643/… Nếu bạn đồng ý rằng yêu cầu làm rõ, vui lòng bỏ phiếu cho meta.stackexchange.com/questions/281980/…
Michael Freidgeim

Câu trả lời:


88

Bạn nên trả lại 401 UnauthorizedMã trạng thái. Bạn cũng có thể cung cấp siêu phương tiện để thiết lập lại mã thông báo

Hãy nghĩ về những gì xảy ra trong một ứng dụng web. Bạn đến nói một trang web ngân hàng. Nếu không được xác thực, nó sẽ đưa bạn đến trang đăng nhập. Sau đó, bạn đăng nhập và bạn có thể sử dụng một thời gian. Sau đó, nó hết hạn và chu kỳ lặp lại.

Chỉ là một suy nghĩ.


39

theo thông số kỹ thuật rfc6750 - "Khung cấp phép OAuth 2.0: Sử dụng mã thông báo mang", https://tools.ietf.org/html/rfc6750 , p.8, phần 3.1, máy chủ tài nguyên phải trả về 401:>

invalid_token Mã thông báo truy cập được cung cấp đã hết hạn, bị thu hồi, không đúng định dạng hoặc không hợp lệ vì các lý do khác. Tài nguyên NÊN phản hồi bằng mã trạng thái HTTP 401 (Không được phép). Máy khách CÓ THỂ yêu cầu mã thông báo truy cập mới và thử lại yêu cầu tài nguyên được bảo vệ.


2
Lưu ý NÊN vs PHẢI . Là một người gọi, sẽ rất vui nếu có thể dựa vào 401. Ồ tốt.
dbreaux

13

FWIW Facebook sử dụng 400 với phản hồi JSON tùy chỉnh. Cá nhân tôi muốn 401 với phản hồi JSON tùy chỉnh.

Đây là phần phản hồi của FB:

{
  "error": {
    "message": "Error validating access token: Session has expired on Jul 17, 2014 9:00am. The current time is Jul 17, 2014 9:07am.",
    "type": "OAuthException",
    "code": 190,
    "error_subcode": 463
  }
}

28
Có điều gì đó nói với tôi rằng Facebook nên được coi là ngoại lệ, không phải kim chỉ nam để phát triển. Chỉ nói.
Victor Ivens

6
Đó có phải là một cuộc gọi tới Facebook với tư cách là một máy chủ ủy quyền hay đến một nhà cung cấp tài nguyên? Các máy chủ uỷ quyền phải trả lại 400: tools.ietf.org/html/rfc6749#section-5.2 , nhưng các nhà cung cấp tài nguyên phải trả lại 401
Michael Freidgeim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.