用于重定向到 REST api 中的身份验证的适当 HTTP 状态
Posted
技术标签:
【中文标题】用于重定向到 REST api 中的身份验证的适当 HTTP 状态【英文标题】:Appropriate HTTP status for redirecting to authentication in a REST api 【发布时间】:2020-10-30 17:57:50 【问题描述】:我有点惊讶,在搜索了一段时间后,我没有找到我想的那么多答案(好吧我没有找到),所以也许通过在这里问我们可以提供帮助改善搜索结果。
我正在构建一个具有基于 JWT 身份验证的 REST api。有一个 /auth/login 路由,它在登录/密码验证后返回令牌,令牌随后在 Authorization http header 中的每个路由中发送。
不是,假设有人在不发送令牌的情况下(即在登录之前)查询另一条路线(例如 /cars)。如果我返回 401 未授权,我可以通过前端查询 /auth/login 来获取令牌。
但是,严格来说,这不符合 REST 规范,因为每个资源都应该可以从最初的资源中发现,并且访问 /cars 并收到 401 的客户端将不知道 /auth/login。
所以另一种选择是像302这样的重定向。但是这种语义意味着资源被临时移动了,事实并非如此(资源仍然是/cars,您只需要先进行身份验证)。
那么,在“真正的”rest api 中执行此过程的正确方法是什么?
【问题讨论】:
【参考方案1】:我 100% 同意,这就是我提出这个标准的原因:
https://datatracker.ietf.org/doc/html/draft-pot-authentication-link-01
想法是,对于这样的情况,您应该能够返回带有authentication
rel 的Link
标头,以便客户端可以发现如何继续。
【讨论】:
以上是关于用于重定向到 REST api 中的身份验证的适当 HTTP 状态的主要内容,如果未能解决你的问题,请参考以下文章
使 Web API 身份验证返回 401 而不是重定向到登录页面
PHP 中的 Spotify API 身份验证 - 重定向 URI 无效