2012-01-13 56 views
32

我有一個JSON REST API。有一個握手會給你一個有效15分鐘的令牌。您在15分鐘內完成的所有呼叫應該可以正常工作。 15分鐘後,我返回一個錯誤對象(包括代碼,消息,成功= false),但我也想知道應該返回什麼HTTP錯誤代碼?並且會使用HTTP錯誤代碼搞亂某些客戶端? (HTML5,iPhone,Android)。在這種情況下什麼被認爲是最佳實踐?令牌已過期 - JSON REST API - 錯誤代碼

+4

+1,很好的問題。你有沒有找到一個很好的解決方案呢? (順便說一句,[netflix](http://developer.netflix.com/docs/read/HTTP_Status_Codes)和[linkedin](https://developer.linkedin.com/documents/handling-errors-invalid-tokens)都會返回401)。 – 2014-07-12 12:21:07

+0

[會話令牌無效時應使用什麼狀態碼?]的可能重複(https://stackoverflow.com/questions/20613088/what-status-code-should-i-use-when-session-token-is - 無效) – 2017-10-07 09:58:12

回答

3

我搜索了OAuth 2規範,所有我能找到的是當它到期時它們會返回「無效令牌錯誤」。我沒有提及他們使用的HTTP代碼。但是,我會說你最安全的賭注就是使用400.

37

你應該返回一個401 Unauthorized狀態碼。您可能另外提供超媒體以再次建立令牌

想想在web應用程序中會發生什麼。你去說一個銀行網站。如果未被授權,它會將您發送到登錄頁面。然後你登錄,你很好去一段時間。然後它到期,循環重複。

只是一個想法。

5

FWIW Facebook使用400與自定義JSON響應。我個人更喜歡401自定義JSON響應。

這裏是FB的響應體:根據規範rfc6750

{ 
    "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 
    } 
} 
+8

東西告訴我,Facebook應該被視爲例外,而不是發展的指導原則。只是說。 – 2016-09-17 22:13:05

+0

這是針對授權服務器還是資源提供者的Facebook調用?授權服務器應返回400:https://tools.ietf.org/html/rfc6749#section-5.2,但資源提供者應返回401 – 2017-10-07 21:04:30

7

- 「要OAuth 2.0授權框架:承載令牌使用」,https://tools.ietf.org/html/rfc6750,第8頁,第3.1節,資源服務器應該返回401: >

INVALID_TOKEN 提供的訪問令牌到期,撤銷,畸形,或 其他原因而無效。資源應該用 響應HTTP 401(未授權)狀態碼。客戶端MAY 請求新的訪問令牌並重試受保護的資源 請求。