【问题标题】:Return HTTP 401 and say client DO NOT repeat request返回 HTTP 401 并说客户端不要重复请求
【发布时间】:2014-09-03 15:04:34
【问题描述】:

我们实施了自定义身份验证。用户名和密码在请求正文中发送。如果用户或密码无效,则服务器返回 HTTP 401。服务器使用 C#、MVC3 和 .NET 4.0 实现。

我们遇到的问题是,如果客户端收到 401,那么它会自动重新发送相同的请求 2 次。实际上,这只是 iOS 的问题。 iOS 家伙说它发生在低级别,并且在应用程序中失控。所以可能服务器应该能够说客户端不再发送请求。

这对我们来说是个问题,因为我们使用 Active Directory,并且在密码无效的情况下,我们会尝试 3 次而不是仅一次。所以帐户很快就被意外锁定了。

我发现这个document

401 未经授权

...客户端可以使用合适的授权头域重复请求。

如何返回 HTTP 401 并告诉客户端不再重复请求?

【问题讨论】:

    标签: c# ios asp.net-mvc-3 http-status-codes http-status-code-401


    【解决方案1】:

    您可以改用 403:

    来自W3网站:

    10.4.4 403 禁止

    服务器理解请求,但拒绝执行。 授权将无济于事,并且不应重复请求。

    确实,这有点棘手:当身份验证成功时,403 似乎更合适,但特定用户不允许请求的资源,这不是你的情况。但是,403 意味着客户端不应该重复认证,这就是你想要的。

    如果登录页面只能由人类解释,那么您可以考虑返回“200 OK”并再次显示登录页面(可能会向用户显示登录失败的可见指示)。

    【讨论】:

    • 是的,我正在考虑这个选项...但是我们已经有一些版本的客户端可以使用 401。它应该也适用于它们,而无需更改 HTTP 代码。另一方面,401 更适合未通过身份验证(请参阅stackoverflow.com/questions/3297048/…)。
    猜你喜欢
    • 2011-12-10
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多