【问题标题】:How can I protect a express route without authentication?如何在没有身份验证的情况下保护快速路由?
【发布时间】:2020-02-29 14:06:19
【问题描述】:

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

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

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

我该如何继续?我想过使用一些加密过程来获得类似的东西:

/user/PdfgdfJFDGTfrfgdsf

【问题讨论】:

    标签: node.js rest express get


    【解决方案1】:

    您的问题没有真正的意义。您不需要身份验证,但您只希望用户能够查看他们自己的数据,以便其他人无法查看。

    解决这个问题的唯一方法是使用某种形式的身份验证。用户必须在用户为他们呈现页面之前向服务器证明他们被允许查看该数据。

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

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

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

    这是一个不一致的说法。你说 “用户不需要经过身份验证即可执行此代码” 然后你说 “我不希望任何人可以使用其他人的用户 ID 执行此请求。”。你不能两者兼得。用户要么需要证明授权,要么不需要。选一个。不能两者兼有。

    【讨论】:

      【解决方案2】:

      您可以为此使用 jwt 并为此使用身份验证中间件

      在解码 jwt 令牌时,您可以实现逻辑来检查 decodedToken.user_id(假设您在编码令牌有效负载时添加 user_id)是否等于路由中的 :idUser(或您想要的任何类型的逻辑)在那里。

      【讨论】:

      • 但是你得到那个 JWT 令牌,只有在认证之后,对吧?
      猜你喜欢
      • 2013-04-21
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 2020-01-10
      相关资源
      最近更新 更多