用于重定向到 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 状态的主要内容,如果未能解决你的问题,请参考以下文章

具有错误凭据的 API 重定向到 html 登录表单

text 身份验证API路由重定向到登录页面

使 Web API 身份验证返回 401 而不是重定向到登录页面

PHP 中的 Spotify API 身份验证 - 重定向 URI 无效

Laravel 在所有 api 路由中使用 Web 身份验证重定向到主页

使用身份验证护照系统覆盖 laravel 中 apis url 的身份验证重定向