2015-10-09 33 views
2

我正在開發一個使用身份驗證令牌的RESTful API。RESTful API是否應爲令牌過期和未授權返回不同的狀態碼或錯誤消息?

工作流程簡單;客戶端執行a/getAuth請求,發送用戶憑證,該憑證會爲該用戶返回一個令牌。

然後,用戶將所有以下請求中的令牌作爲標頭傳遞給API。經過一段時間/呼叫次數(由服務器決定)令牌到期。當過期標記在其標頭中的請求到達服務器時,響應狀態爲401未授權。 在這種情況下,用戶必須使用/ getAuth請求另一個令牌,依此類推。

我面臨的問題是,當任何其他原因(訪問未經授權的資源)未經授權的請求,該API還返回401未經授權。此時,客戶端無法知道它是否嘗試訪問他無法訪問的內容,或者其用戶令牌是否已過期。如果沒有任何方式知道它,它會再次請求一個令牌,並重播相同的請求,從而再次獲得401等等。

所以我的問題是:應該一個RESTful API返回不同的狀態代碼或錯誤信息,對於過期的令牌比狀態和錯誤未經授權的請求返回,或應客戶找到某種方式,用於管理

我發現客戶端的解決方案是保存每個請求的URL,而不是重試一個請求失敗與新鮮(剛收到)令牌。但我認爲它非常骯髒。

+0

您可以爲用戶無權訪問的路由返回AccessDenied –

回答

2

令牌過期後,客戶端不再被授權,因此返回一個401 Unauthorized頭是有意義的。

我面臨的問題是,當任何其他原因的未授權請求(訪問未經授權的資源),該API還返回401未經授權。此時,客戶端無法知道它是否嘗試訪問他無法訪問的內容,或者其用戶令牌是否已過期。

如果(授權)客戶端試圖訪問一個資源,不具備適當的權限,您應該返回403 Forbidden

相關問題