问题描述
我的端点POST /auth/check-pin
具有JSON正文
{
"subAccountId": 1,"pin": 5555
}
当subAccountId不存在或PIN错误时,我应该返回什么响应?
解决方法
404不存在的子帐户
不,那肯定是错误的。
HTTP状态代码是transfer of documents over a network域的一部分。它们是元数据的一种形式,它允许通用组件理解响应的语义。
404的HTTP定义是:
404(未找到)状态代码表示原始服务器未找到目标资源的当前表示,或不愿意透露该资源的存在。
目标资源是请求行中uri标识的事物。在您的示例中,/auth/check-pin
是此请求的标识符。在这种情况下,404的含义是我们找不到/auth/check-pin
,换句话说,目标uri中似乎存在拼写错误。
这个意思不是特别适合您的情况,因为您请求中的问题是在 request-body 中,而不是在target-uri中。
更合理的选择是403 Forbidden,其大致翻译为“我了解您想要的东西,但我不会这么做”; 409 Conflict“资源的当前状态不允许我们这样做”或422 Unprocessable Entity。
在实践中-选择哪种选择并不重要,因为除了语义之外,它们之间没有很多标准化的区别(例如,它们对缓存的含义相同)。
这里要考虑的第二件事是要向试图猜测密码的攻击者提供多少信息。
如果您让我能够区分无效帐号和有效帐号,那么这将大大减少我花在破坏密码上的费用。
因此如果您所处的环境对此很敏感,那么您将根本不想在无法识别的subAccountId和无法识别的图钉之间进行区分。因此,可能会在两种情况下使用相同的状态代码和相同的响应正文,
403 Forbidden
No more information available