保护Node.js RESTful API

保护Node.js RESTful API,node.js,rest,jwt,restful-authentication,Node.js,Rest,Jwt,Restful Authentication,我是Node.js的新手,只想用它为我在Unity3D中的游戏创建RESTful API。就在游戏结束时,如果玩家想分享,我想从他/她那里得到一些信息,如姓名和电话号码等。我知道如何实现这个服务器,但我的问题是安全性。我在Node.js中搜索了很多关于安全性的信息,但我还没有找到答案。在我的搜索中,我看到了一个npm包,它是JWT,并且知道了如何使用它。据我所知,我们向服务器发送一个请求,作为响应,它返回一个承载令牌,我们可以用它设置头部,并使用GET、POST或其他方法。我的问题是,任何人都可

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

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

  • 用户注册(电子邮件、密码、电话、姓名等)
  • 您的服务器为该用户返回一个201和一个JWT令牌签名的指定符
    JWT.sign({id:user.id,role:user.role},'secret',{expiresIn:60*60})
  • 然后,您可以将中间件添加到路由中,以验证令牌是否在身份验证头中以及令牌是否有效
    jwt.verify(标记“您的秘密”)
  • 因为您在头中使用令牌,所以应该使用HTTPS来加密http请求
  • 您还需要一个登录端点来接收id和密码,并为该用户生成一个新的令牌,因为令牌可能会过期
  • 通常我使用这个软件包:在这里你还可以设置加密算法和更多选项


    另一个包含图像的解释是:

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

  • 用户注册(电子邮件、密码、电话、姓名等)
  • 您的服务器为该用户返回一个201和一个JWT令牌签名的指定符
    JWT.sign({id:user.id,role:user.role},'secret',{expiresIn:60*60})
  • 然后,您可以将中间件添加到路由中,以验证令牌是否在身份验证头中以及令牌是否有效
    jwt.verify(标记“您的秘密”)
  • 因为您在头中使用令牌,所以应该使用HTTPS来加密http请求
  • 您还需要一个登录端点来接收id和密码,并为该用户生成一个新的令牌,因为令牌可能会过期
  • 通常我使用这个软件包:在这里你还可以设置加密算法和更多选项


    另一个包含图片的解释:

    谢谢您的回答。游戏中没有任何注册或登录面板。在游戏结束时,如果玩家想分享,我只需要玩家的信息,如电话号码和真实姓名。那么,这种策略可以做到吗?您的案例非常具体,因此您不需要特定的身份验证—您只想存储正确玩游戏的用户的数据?您可以在用户开始游戏时生成一个令牌,然后在他们共享数据时将该令牌发送到服务器。在服务器中,您可以验证该令牌是否由您生成。(相当简单的解决方案)是的,没错。我很抱歉问这个问题,但我如何验证toke是否由我生成?我的第二个问题是关于JWT策略,如果客户端之外有人,请向服务器发送注册请求(第一个可能吗?)然后接收该令牌并向服务器发送其他信息?第一个问题:您可以简单地使用只有您知道的私有令牌生成令牌,并且当客户端发送该令牌时,您可以验证该令牌是否由您的服务器签名。第二:如果您的服务器暴露在web上,那么每个人都可以向您的API发出请求,这就是为什么如果您想要处理该请求或返回401,您可以使用validade令牌的原因。Ofc您的客户端不想共享令牌,否则任何人都可以使用它并向您的服务器发出请求,但如果有人给出密码,情况也是一样的:DThanks for answer。游戏中没有任何注册或登录面板。在游戏结束时,如果玩家想分享,我只需要玩家的信息,如电话号码和真实姓名。那么,这种策略可以做到吗?您的案例非常具体,因此您不需要特定的身份验证—您只想存储正确玩游戏的用户的数据?您可以在用户开始游戏时生成一个令牌,然后在他们共享数据时将该令牌发送到服务器。在服务器中,您可以验证该令牌是否由您生成。(相当简单的解决方案)是的,没错。我很抱歉问这个问题,但我如何验证toke是否由我生成?我的第二个问题是关于JWT策略,如果客户端之外有人,请向服务器发送注册请求(第一个可能吗?)然后接收该令牌并向服务器发送其他信息?第一个问题:您可以简单地使用只有您知道的私有令牌生成令牌,并且当客户端发送该令牌时,您可以验证该令牌是否由您的服务器签名。第二:如果您的服务器暴露在web上,那么每个人都可以向您的API发出请求,这就是为什么如果您想要处理该请求或返回401,您可以使用validade令牌的原因。Ofc您的客户端不想共享令牌,否则任何人都可以使用它并向您的服务器发出请求,但如果有人提供密码,情况也是一样的:D