我正在使用身份验证令牌开发RESTful API。
工作流程很简单;客户端执行/ getAuth请求,发送用户凭据,该凭据返回该用户的令牌。
然后,用户将以下所有请求中的令牌作为标头传递给API。在一段时间/数量的呼叫(由服务器决定)之后,令牌到期。当其标头中包含过期令牌的请求到达服务器时,响应状态为 401 Unauthorized 。 在这种情况下,用户必须使用/ getAuth请求另一个令牌,依此类推。
我面临的问题是,当请求因任何其他原因(访问未经授权的资源)未经授权时,API也会返回401 Unauthorized。此时,客户端无法知道它是否正在尝试访问他无法访问的内容,或者其用户令牌是否已过期。在没有任何方式知道的情况下,它会再次请求令牌,并重播相同的请求,从而再次获得401等等。
所以我的问题是: RESTful API是否应该为过期的令牌返回不同的状态代码或错误消息,而不是为未经授权的请求返回的状态和错误,或者客户端是否应该找到某种方法来管理?
我发现客户端的解决方案是保存每个请求URL,而不是使用新的(刚收到的)令牌重试失败的请求。但我认为它很脏。
答案 0 :(得分:2)
令牌过期后,客户端不再获得授权,因此返回401 Unauthorized
标头是有意义的。
我面临的问题是,当请求因任何其他原因(访问未经授权的资源)未经授权时,API也会返回401 Unauthorized。此时,客户端无法知道它是否正在尝试访问他无法访问的内容,或者其用户令牌是否已过期。
如果(授权的)客户端尝试访问资源但没有适当的权限,则应返回403 Forbidden
。