2014-09-03 129 views
0

我們實現了自定義驗證。用戶名和密碼在請求體內發送。如果用戶或密碼無效,則服務器將返回HTTP 401.服務器使用C#,MVC3和.NET 4.0實現。返回HTTP 401並說客戶端不要重複請求

我們面臨的問題是,如果客戶端收到401,那麼它會自動重發相同的請求2次。其實這只是iOS的問題。 iOS的人說,它發生在低級別,並且在應用程序中失控。所以可能服務器應該能夠說客戶端不再發送請求。

這對我們來說是個問題,因爲我們使用Active Directory,如果密碼無效,我們會花費3次嘗試而不是僅僅一次。因此,帳戶很快就會變得鎖定並出乎意料。

,我發現這個document,說

401未授權

...客戶端可以重複用合適的Authorization頭字段的請求。

如何返回HTTP 401並告訴客戶端不再重複請求?

回答

1

你可以用403來代替:

W3網站:

10.4.4 403禁止

服務器理解了請求,但拒絕執行。 授權不起作用,請求不應重複。

事實上,這有點棘手:當認證成功時,403似乎更合適,但是請求的資源不被允許用於特定用戶,這不是您的情況。但是,403意味着客戶端不應該重複認證,這就是你想要的。

如果登錄頁面只能被人類解釋,那麼你可以考慮返回「200 OK」,並簡單地再次顯示登錄頁面(或許對用戶顯示指示登錄失敗)。

+0

是的,我想到了這個選項......但是我們已經有了一些與401一起工作的客戶端版本。它也應該爲他們工作,而不需要改變HTTP代碼。另一方面,401更適合未認證(請參閱http://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses)。 – wishmaster 2014-09-03 15:22:47