如果凭据正确但需要2FA,返回哪个HTTP状态码?



差不多就是标题了。

如果一个登录请求已经成功地输入了用户标识符和密码,但是系统决定向用户发出2fa挑战,HTTP状态码应该是什么?

当前它返回200 OK,响应中的数据表明2fa挑战。这在功能上是可行的,但是从监视和警报的角度来看,能够更容易地实时查看具有2fa挑战的请求数量将是有价值的。我们做了一些DB日志记录,目前需要用于此目的,这只是比我想要的更多的摩擦。

我还想到了其他涉及中间件服务的用例,如果它们能够看到2fa挑战,而不需要那么复杂的响应格式知识,那就太好了。

我查看了200级响应代码列表,似乎没有一个符合要求,我想避免使用401,因为我们使用401表示输入错误的密码。

状态码应该是'403 Forbidden'。用户已经提供了正确的登录信息,但由于2fa挑战,他们仍然没有也不应该访问资源,因此状态码为"Forbidden"。

身份验证实际上意味着您要验证所讨论的人是否就是他们所说的那个人。

如果一些操作需要2FA,在我看来,你真正说的是你需要更强的认证。

因此,如果您对由于缺乏2FA认证而失败的操作进行建模,401对我来说是最合适的。如果你"想避免它",那么你可以使用400403之类的东西作为备用。

但是如果你不是建模错误,而是这只是一个多步骤的登录过程,而你正在提供表单/action/json响应,表明该过程的下一步是2FA挑战,那么用户在做这一步时不是"有错",所以200 OK是正确的选择。

如果你在系统的某些部分需要一些其他的指示符,也许不要重载HTTP状态码来表示一堆他们不需要的东西,并找到其他方式来传达信息。

最新更新