具有相同的路由要求而不是身份验证?

Posted

技术标签:

【中文标题】具有相同的路由要求而不是身份验证?【英文标题】:Having same route require and not authentication? 【发布时间】:2020-11-12 08:53:48 【问题描述】:

我对我的 RESTful 或通用 API 解决方案有疑问。

所以,情况是我需要以公共和私人方式提供相同的资源。这意味着,GET api/products?private=true 将返回当前用户拥有的产品并需要身份验证,而 GET api/products?private=true 将返回所有没有身份验证。

我知道这是不好的做法,但想听听您的意见。

谢谢

【问题讨论】:

【参考方案1】:

由于/api/products?private=true/api/products?private=false 是不同的url,从HTTP 的角度来看,这两个端点返回不同的结果并没有错。

我认为通常查询参数用作资源的“修饰符”。因此,如果您有一个返回产品的资源,并且您有一个过滤此列表以返回子集的查询参数,我会说这是相当常见的。

作为替代方案,您可以考虑使用 /products/my-products 之类的东西来创建 2 个更加不同的端点。

【讨论】:

当然。现在我意识到我的问题还不够清楚。我的意思是问拥有相同的路由(/products)、公开(意味着它不需要身份验证)和私有(它确实需要身份验证)是否是不好的做法,具体取决于查询参数。 @djoloho HTTP 没有路由的概念,只有 url 和路径。不同的 url 可以有不同的身份验证要求,所以不,我不认为这有什么问题。请注意,一旦客户端通过身份验证,他们可能会继续向您的整个域发送每个路径的身份验证信息。

以上是关于具有相同的路由要求而不是身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

具有 Windows 身份验证的 IIS 7.5 Web 应用程序是不是要求最终用户具有文件权限?

如何查看数据库中是不是有其他用户具有相同的用户名 - JWT Django REST 身份验证

仅在 Laravel 中公开某些身份验证路由

具有基于 ssl 证书的身份验证的 m2e

具有完美身份验证和路由的服务器端 Swift

Laravel Sanctum 返回 404 而不是未经身份验证的 401