天天看點

[譯] 401 vs 403

多年來,關于“未授權”的場景應該使用什麼樣的 HTTP 狀态碼的讨論從未停歇過——并且原始的 HTTP 1.1 規範并未明确指出 401 (未授權)和 403 (禁止)的差別。

但是,肯定有必要區分在請求中沒有提供或者提供無效憑據以及提供有效憑據但是對于正要嘗試的操作憑據中的“實體”卻并未授權的情況。

這裡有一些例子:

在過去不錯的 ASP.NET FormsAuth (在 Katana 中已經被應用到全新的 cookie 中間件裡)中——401 會被轉成 302 重定向到登入頁面。對于匿名請求來說是不錯的——但是當使用者已經經過認證,一個失敗的授權(比如,使用 [Authorize(Role = "foo")])也會導緻登入頁面的顯示——這就會很不直覺。你更傾向于解決這樣的錯誤或者展示一個錯誤頁。

401 (未授權) 狀态碼訓示請求沒有被應用因為對于目标資源缺少合法的認證憑據。伺服器生成的 401 響應 必須 發送一個 WWW-Authenticate 封包頭,其字段至少包含一個可應用于目标資源的質詢。 伺服器接收到合法的憑據但是并不足以擷取通路權限應該使用 403 (禁止) 狀态碼進行響應。

也許我們會在 vNext 中修複它。

繼續閱讀