2012-06-26 66 views
10

我正在開發一個API,它也會有一個認證/授權組件。我應該向沒有足夠訪問權限的REST API用戶返回401或405響應代碼嗎?

無論身份驗證狀態如何,任何人都可以寫入(POST),但取決於您是否未經身份驗證,是否以普通用戶身份進行身份驗證或身份驗證爲管理員以及您嘗試訪問哪些資源我要爲GET,DELETE和PUT返回不同的響應。

我試圖找出未經過身份驗證和/或授權的用戶的最合適的響應代碼。

記住http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

未授權 - > 401

禁止 - > 403

不允許的方法 - > 405

讓我們用一個具體的例子:

  • John Doe未經認證,DELETE應該收到401還是405?
  • 艾米已通過身份驗證但未獲得授權,對DELETE她是否應該收到403或405?

(請記住,即使約翰和艾米是被禁止的或未經授權的,這並不意味着他們arent能夠與不同的HTTP動詞來訪問相同的資源。)

感謝。

+0

另請參閱http://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses – Ryan

+0

所以約翰應該得到一個401,艾米應該得到一個403. – Ryan

+0

405方法不允許似乎[完全不相關](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)。 – Ryan

回答

11

405 Method Not Allowed只應使用如果不支持該方法。它不應該用於告訴客戶端他們不能使用此方法。

所以你的情況下唯一的好的HTTP代碼是401 Unauthorized。它指示客戶端該方法存在,並且他們需要登錄才能訪問它。

+3

差不多。一旦你得到認證,但不允許做手術,這將是403. –

+0

@JulianReschke,嗯不知道。對於403,標準規定:「與401未授權的響應不同,認證不會產生任何影響」。但是在這種情況下,鑑別*會有所作爲,因爲它允許訪問資源。 –

+2

Laurent:「服務器理解請求,但拒絕授權,提供不同的用戶認證證書可能會成功,但是請求中提供的任何憑證都不足,請求不應該使用相同的憑證重複。 - http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-latest.html#status.403 –

7

在這種情況下,我想提供澄清一些實例中是有用的:

  • 未認證+支持的方法= 401
  • 未認證+不支持的方法= 405
  • 認證+授權+支持的方法= 2xx
  • Authenticated + Authorised + Unsupported method = 405
  • Au thenticated +未經授權+支持的方法= 403
  • 認證+未經許可+不支持的方法= 405

換句話說,從程序的角度來看:

  1. 檢查方法是否被支持。如果不是:405
  2. 如果支持,請檢查用戶是否已通過身份驗證。如果不是:401
  3. 如果已通過驗證,請檢查用戶是否已獲得授權。如果不是:403
  4. 如果授權:2xx

編輯:我偶然發現此圖後,認爲這可能是別人誰可能碰到這個崗位絆倒有用。點擊放大。

enter image description here

原始here

+1

哇,這是令人難以置信的詳細。我向開發者們祈禱,我永遠不需要使用超過5%的流程圖。 –

相關問題