【问题标题】:Securing Node.js RESTful APIs保护 Node.js RESTful API
【发布时间】:2018-09-13 16:42:48
【问题描述】:

我是 Node.js 的新手,只想用它为我在 Unity3D 中的游戏创建 RESTful API。就在游戏结束时,如果他/她想分享,我想从玩家那里获得一些信息,例如姓名和电话号码等。我知道如何实现这个服务器,但我的问题是安全性。我在 Node.js 中搜索了很多关于安全性的信息,但我还没有弄清楚。在我的搜索中,我看到有一个 npm 包,它是 JWT 并想出了如何使用它。据我所知,我们向服务器发送一个请求,作为响应,它返回一个不记名令牌,我们可以用它设置我们的标头并使用 GET、POST 或其他方法。我的问题是任何人都可以向该 URL 发送请求并获取该令牌并做其他事情(我认为我犯了一个错误)。那么这种服务器的安全解决方案是什么?

【问题讨论】:

    标签: node.js rest jwt restful-authentication


    【解决方案1】:

    有多种身份验证策略(基本、oauth、令牌、cookies)。由于您已经选择了 JWT 策略,我将尝试解释它。

    1. 用户注册(电子邮件、密码、电话、姓名等...)
    2. 您的服务器返回一个 201 和一个为该用户 jwt.sign({ id: user.id, role: user.role }, 'secret', { expiresIn: 60 * 60}) 签名的 JWT 令牌
    3. 然后您可以在路由中添加一个中间件,以验证令牌是否在身份验证标头中以及令牌是否有效。 jwt.verify(token, 'your secret')
    4. 由于您在标头中使用令牌,因此您应该使用 HTTPS 来加密您的 http 请求
    5. 您还需要一个登录端点来接收 ID 和密码并为该用户生成一个新令牌,因为令牌可能会过期。

    通常我使用这个包:https://github.com/auth0/node-jsonwebtoken,你还可以在其中设置加密算法和更多选项。

    另一种含图片说明:https://stackoverflow.com/a/45978644/4120554

    【讨论】:

    • 感谢您的回答。游戏中没有任何注册或登录面板。在游戏结束时,如果玩家想要分享,我只想要玩家的电话号码和真实姓名等信息。那么这个策略能做到吗?
    • 您的情况非常具体,因此您不需要特定的身份验证,您只想存储玩过您游戏的用户的数据,对吗?您可以在用户开始游戏时生成一个令牌,然后如果他们共享了他们的数据,则将该令牌发送到服务器。在您的服务器中,您可以验证该令牌是否由您生成。 (很简单的解决方案)
    • 是的,没错。很抱歉问这个问题,但我如何验证该令牌是否由我生成?
    • 我的第二个问题是关于 JWT 策略的,如果客户端之外的人,向服务器发送注册请求(首先可能吗?)然后接收该令牌并将其他信息发送到服务器?
    • 第一个问题:您可以简单地使用只有您知道的私有令牌生成一个令牌,当客户端发送该令牌时,您可以验证该令牌是否由您的服务器签名。第二:如果您的服务器暴露在网络上,每个人都可以向您的 API 发出请求,这就是为什么如果您想处理该请求或返回 401,您需要验证令牌。您的客户不想共享令牌,否则任何人都可以使用它并向您的服务器发出请求,但如果有人提供密码,那也是一样的:D
    猜你喜欢
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 2015-02-03
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多