返回HTTP 401并说客户端不要重复请求

本文关键字:请求 客户端 HTTP 返回 | 更新日期: 2023-09-27 18:20:27

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

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

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

我找到了这份文件,上面写着

401未经授权

客户端可以使用合适的Authorization头字段重复请求。

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

返回HTTP 401并说客户端不要重复请求

您可以使用403代替:

来自W3站点:

10.4.4 403禁用

服务器理解该请求,但拒绝执行。授权没有帮助,不应重复请求。

事实上,这有点棘手:当身份验证成功时,403似乎更合适,但请求的资源不允许用于特定用户,而您的情况并非如此。然而,403意味着客户端不应该重复身份验证,这正是您想要的。

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