payload中的identifier不存在应该返回哪个http状态码?
Which http status code should be returned when the identifier in the payload does not exist?
我有端点 POST /permission-period,它应该为特定用户创建权限期限。
负载:
{
"userId": 10,
"permissionPeriodDateFrom": "2017-12-01",
"permissionPeriodDateTo": "2017-12-10"
}
如果有效负载中的任何属性无效,我通常会return 422 Unprocessable Entity,这意味着请求有效负载的语法有效但由于数据无效而无法处理。
如果用户不存在并且我不想向客户提供此安全相关信息,我应该 return 处于什么状态?我应该公开用户不存在的消息吗?
我认为 HTTP 状态代码明智,我会选择 400 - Bad request
。关于 returned 错误消息,我会在对 security-related 信息保密的同时为用户提供有用的信息。
你可以 return 像 The given userId is either malformed, does not exist or cannot be linked to the posted resource
这样的东西。这将允许用户识别 body 中出现错误的位置 (属性 userId
) 但不会告诉他确切的错误以防止用户枚举。
好消息是,您在创建 permission-period
时显然有一个受保护的端点,因此 API 用户是可识别的,您可以采取其他措施来防止用户枚举和相关的暴力攻击,例如作为 consumer-based 在 x 次尝试后限制或锁定 API 消费者。
希望我的笔记对您的API设计有所帮助。
我有端点 POST /permission-period,它应该为特定用户创建权限期限。
负载:
{
"userId": 10,
"permissionPeriodDateFrom": "2017-12-01",
"permissionPeriodDateTo": "2017-12-10"
}
如果有效负载中的任何属性无效,我通常会return 422 Unprocessable Entity,这意味着请求有效负载的语法有效但由于数据无效而无法处理。
如果用户不存在并且我不想向客户提供此安全相关信息,我应该 return 处于什么状态?我应该公开用户不存在的消息吗?
我认为 HTTP 状态代码明智,我会选择 400 - Bad request
。关于 returned 错误消息,我会在对 security-related 信息保密的同时为用户提供有用的信息。
你可以 return 像 The given userId is either malformed, does not exist or cannot be linked to the posted resource
这样的东西。这将允许用户识别 body 中出现错误的位置 (属性 userId
) 但不会告诉他确切的错误以防止用户枚举。
好消息是,您在创建 permission-period
时显然有一个受保护的端点,因此 API 用户是可识别的,您可以采取其他措施来防止用户枚举和相关的暴力攻击,例如作为 consumer-based 在 x 次尝试后限制或锁定 API 消费者。
希望我的笔记对您的API设计有所帮助。