2014-09-03 131 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