RESTful API 是否应该针对令牌过期和未经授权返回不同的状态代码或错误消息?

Ray*_*jax 6 authentication api rest restful-authentication node.js

我正在使用身份验证令牌开发 RESTful API。

工作流程简单;客户端执行 /getAuth 请求,发送用户凭据,该凭据返回该用户的令牌。

然后,用户将以下所有请求中的令牌作为标头传递给 API。经过一段时间/多次调用(由服务器决定)后,令牌就会过期。当标头中包含过期令牌的请求到达服务器时,响应状态为401 Unauthorized。在这种情况下,用户必须使用 /getAuth请求另一个令牌,依此类推。

我面临的问题是,当请求因任何其他原因未经授权(访问未经授权的资源)时,API 也会返回 401 Unauthorized。此时,客户端无法知道它是否正在尝试访问他无法访问的内容,或者其用户令牌是否已过期。在没有任何方式知道这一点的情况下,它会再次请求令牌,并重放相同的请求,从而再次得到 401 等等。

所以我的问题是:RESTful API 是否应该为过期令牌返回不同的状态代码或错误消息,而不是为未经授权的请求返回的状态和错误,或者客户端应该找到某种方法来管理它

我在客户端找到的解决方案是保存每个请求 url,而不是重试因新的(刚刚收到的)令牌而失败的请求。但我觉得它很脏。

Ale*_*chi 4

令牌过期后,客户端不再被授权,因此返回401 Unauthorized标头是有意义的。

我面临的问题是,当请求因任何其他原因未经授权(访问未经授权的资源)时,API 也会返回 401 Unauthorized。此时,客户端无法知道它是否正在尝试访问他无法访问的内容,或者其用户令牌是否已过期。

如果(授权的)客户端尝试访问资源但没有适当的权限,您应该返回403 Forbidden