没有身份验证,如何保护快速路由?

时间:2020-02-29 14:06:19

标签: node.js rest express get

我正在尝试在我的nodeJs应用程序中使用Express实现GET方法。 我想做这样的事情以显示用户数据:

router.get("/user/:idUser", (req, res) => {

用户无需通过身份验证即可执行此代码。但是我不希望任何人都可以使用其他人的用户ID执行此请求。因为他可以看到他不应该看到的数据。

我该如何进行?我考虑过使用某种加密过程来获得类似的东西:

/user/PdfgdfJFDGTfrfgdsf

2 个答案:

答案 0 :(得分:1)

您的问题确实没有道理。您不需要身份验证,但只希望用户能够查看他们自己的数据,以便其他任何人都无法查看。

解决此问题的唯一方法是使用某种形式的身份验证。用户必须向服务器证明他们被允许查看数据,然后才能为他们呈现页面。

是的,您可以使URL晦涩难懂(使其成为一些几乎不可猜测的字符串),但是尚不清楚要解决什么问题。用户自己将无法记住或键入它,因此它可能必须是网页中的链接,如果它是未经身份验证的网页中的链接,那么任何人都可以使用它-从而破坏了目的。

在某些情况下,您提到的/user/PdfgdfJFDGTfrfgdsf之类的临时链接(通常是特权下载)是通过经过身份验证的渠道(经过身份验证的网页或发送到已知属于经过身份验证的用户的电子邮件地址)发送的),这些链接包含一些独特且难以猜测的代码。然后,用户可以单击该链接(在经过身份验证的网页中或在电子邮件中)并无需进一步身份验证即可访问该资源。在这种情况下,URL中代码的知识将作为身份验证的一种形式。由于URL可能会登录到服务提供商或公司基础结构中,因此并不完全是私有的,因此此技术有其局限性,通常仅用于短期使用(在接下来的10分钟内下载此资源),而不是长期使用。用于身份验证,不用于需要真正安全性的事物。您没有对用例进行足够的解释,以了解这是否适合您的情况。

用户无需通过身份验证即可执行此代码。但是我不希望任何人都可以使用其他人的用户ID执行此请求。因为他可以看到他不应该看到的数据。

这是一个不一致的陈述。您说 “无需验证用户即可执行此代码” ,然后说 ”“我不希望任何人可以使用其他用户的ID执行该请求。” 。不能两者兼有。要求用户证明授权或不要求授权。选一个。不能两者都是。

答案 1 :(得分:0)

您可以为此使用jwt并为此使用auth中间件

在解码jwt令牌后,您可以实施逻辑以检查decodedToken.user_id(如果在编码令牌有效负载时添加了user_id)是否等于路由中的:idUser(或其他)