32

我正在創建一個RESTful服務以向Web應用程序提供數據。我有兩個相關的問題。RESTful HTTP API中的授權,401 WWW-Authenticate

1.如何處理未經授權的請求?

我打算用下面的代碼請求作出迴應:

  • 是資源打開後發現? 200 OK
  • 您是否需要進行身份驗證才能訪問資源? 401未授權
  • 難道您沒有權限訪問某個類別的資源嗎? 403禁止訪問
  • 您是否有權訪問資源類別,但不訪問此特定資源? 404 Not Found阻止人們瞭解他們無法訪問的資源的存在。
  • 資源是否存在? 404 Not Found

這是REST式服務行爲的推薦方式嗎?

2.什麼WWW-Authenticate頭應該401響應供應?

我讀Wikipedia(可能不是最準確的資源,但它爲我的作品),一個401響應必須包括WWW-Authenticate頭,但是在進一步搜索我真的無法找到說這是什麼的任何資源價值的意義和它應該是什麼。

我發現了幾個關於這個標題做題和論壇主題,他們似乎都瞭解OAuth,建議不要使用401個狀態碼或者說你可以做的東西了。

這個頭文件應該包含什麼值?

回答

19

回答您的問題:

如何處理未授權的請求?

您描述它的方式幾乎是RESTful服務的推薦方式。據我所知,這絕對沒有錯。

401響應提供什麼WWW-Authenticate標頭?

一般來說,WWW-Authenticate標題告訴客戶端服務器將接受什麼樣的認證。如果客戶端使未經授權的請求,這意味着他在發送一個缺失或無效Authorization頭的請求,服務器將使用WWW-Authenticate告訴客戶什麼身份驗證方案,他會接受(即基本,摘要或的OAuth)和什麼境界。

想象它像某種身份的問題或挑戰,對服務器的部分,即類似「你是誰?」或者「通過以下方式提供憑證證明你是誰!」。

例如:WWW-Authenticate: Basic realm="My App"

這裏的服務器告訴他使用名爲基本的身份驗證方案的客戶端。領域只不過是一些標識服務器上受保護空間的字符串。

+0

因此,在我有一個Web服務爲Web應用程序提供數據的情況下,標題是什麼樣的? 「Forms realm =」http://my.domain.com/「'是什麼? – Aidiakapi

+1

是的,它可能看起來像這樣。這個領域不需要是域名。它可以是任何字符串。該值只是標識一組共享憑據的資源。這樣,您可以將服務器上的受保護資源分組到多個保護空間,每個保護空間都有自己的認證方案和/或授權數據庫。 – benjiman

0

基於我的研究(谷歌搜索),我決定發送:Newauth realm =「使用登錄令牌」。

網站http://greenbytes.de/tech/tc/httpauth/#unknown有不同的auth方法的測試用例,我還沒有發現任何描述'獲得auth token'的內容,因此我認爲它是'Newauth'。

對我來說也很重要:這不會在客戶端創建登錄提示。

+1

新計劃應該被註冊。 –

+0

@JulianReschke你有什麼信息該怎麼做?或者你在哪裏找到這些信息(可能是一些rfc頁面?)?你將如何在REST API上做到這一點? – sigi

+0

這一切都在RFC 7235中描述。 –