我正在开发RESTful API,我已经实现了基于令牌的身份验证,其中使用时间戳准备了令牌摘要。现在当请求到达API服务器时,我正在检查提供的时间戳是否无效(即指定了将来/过去的日期时间)然后抛出错误消息,指示"未来的令牌被检测到"或者"令牌已过期"。我需要附加HTTP状态代码我很困惑哪种状态代码适合这种情况?
到目前为止,我已经查看了可用的状态代码(ref1,ref2),使用400'错误请求'将适用于此而非401' Unauthorized'和403'禁止'状态代码。
你觉得男人怎么样?答案 0 :(得分:5)
由于时间戳无效,我认为令牌无效。因此客户端不再进行身份验证。所以我会扔401未经授权。您可以自由地将上下文的额外数据添加为带有X前缀的HTTP标头,或添加根据Accept请求标头(json,text等)编码的响应主体。像:
{
"error": {
"status": 401,
"details": {
"code": "401.3",
"description": "The timestamp provided must not be in the future."
}
}
}
它不是403 Forbidden:403表示“客户端已通过身份验证,但无权发送此请求”。在您的情况下,我认为客户端不再经过身份验证。
答案 1 :(得分:0)
变通解决...考虑过期的密码(不是完全过期的密码) 我从https://developer.mozilla.org/en-US/docs/Web/HTTP/Status找到了 403禁止 客户端无权访问内容;也就是说,它是未经授权的, 因此服务器拒绝提供请求的资源。 与401不同,服务器知道客户端的身份。 //---- 好吧,我认为对带有说明或自定义内容标头的403进行响应会更好,因此客户端需要使用新密码使用auth + param调用端点。
现在,关于已过期的信用凭证(尚未考虑用户名和密码,而不是令牌),403我也认为很好,因为“服务器知道客户端的身份”但未经授权。
关于令牌和您的时间戳,我认为带说明的401很不错,因为第一步是服务器看到时间戳,并且时间戳在检查任何凭据之前都会失败。