Javascript 如何保护node.js中的api路由

Javascript 如何保护node.js中的api路由,javascript,json,angularjs,node.js,Javascript,Json,Angularjs,Node.js,我正试图找出在JSON路由中保护数据的最佳方法,该路由将在客户端与我的angular控制器通信 我有一些以JSON格式返回数据的路由,我将给出一个示例: /api/events-返回所有事件 /api/events/:slug-只返回一个事件 /api/bookings-返回所有预订 /api/bookings/:slug-返回所有预订 我搜索了很多,我找到了两个答案,域保护和令牌保护,所以。。哪一个是正确的 代币是如何保护的?如果我发送了一个任何人都能在我的客户代码中找到的令牌,那就没用了,对

我正试图找出在JSON路由中保护数据的最佳方法,该路由将在客户端与我的angular控制器通信

我有一些以JSON格式返回数据的路由,我将给出一个示例:

/api/events
-返回所有事件
/api/events/:slug
-只返回一个事件

/api/bookings
-返回所有预订
/api/bookings/:slug
-返回所有预订

我搜索了很多,我找到了两个答案,域保护和令牌保护,所以。。哪一个是正确的


代币是如何保护的?如果我发送了一个任何人都能在我的客户代码中找到的令牌,那就没用了,对吧?

一个建议和基本解释

对rest客户端使用基于令牌的身份验证。您还可以为rest后端指定cors筛选器

在cors筛选器中指定Access Control Allow Origin以仅允许您的域,以便在客户端用户知道令牌,但另一个域或本地用户不能发送任何请求限制区域

Access-Control-Allow-Origin: http://www.yourdomain.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS
Access-Control-Allow-Headers: X-Requested-With, Content-Type
使用授权标头
authorization:Bearer userToken
在请求中发送检索到的令牌

根据第二个问题的基本令牌身份验证流程

Client tries to login -> Server check username pass etc. and sends token to client -> Client saves token in localStorage or cookie -> Sending token in request with Authorization header -> Server tokenfilter checks is token valid -> accessed restricted area

根据您的第一个问题,同时使用tokenfilter和corsfilter。

标记称为JWT,代表JSON Web标记。它们是验证用户身份的主要且非常简单的方法之一

JWT是一条由点分隔的三部分组成的长字符串。每个都是base64编码的:

  • 第一个称为header,包含一些关于令牌的基本信息
  • 第二个是有效载荷。下面是要在客户端和api之间传输的存储信息。通常是一个用户id左右。这样api就可以对用户进行身份验证
  • 第三部分是签名。这是使令牌安全的部分。签名由头和有效载荷组成,有效载荷用只有api知道的秘密编码
因此,JWT的生命周期非常简单:

  • 您可以注册/登录用户,并向客户端发送存储在用户浏览器的本地或cookie存储中的JWT
  • 使用AngularJS,您可以创建一个拦截器,该拦截器将使用授权头随每个请求向api发送令牌
  • 在每个要保护的路由上的api中,您将使用中间件对JWT进行解码,并检查用户id是否与数据库中的用户匹配。这样,您将保护您的路由免受未经授权的请求
  • 当然,您可以找到使用JWT的第三方库、AngularJS中的拦截器和Node.js中的中间件

    是AngularJS非常好的前端库,为您提供轻松的本地身份验证,以及使用facebook、twitter、github等社交网络进行的非常轻松的身份验证。它包含了拦截器,这样您就不需要自己编写它了,而且它还有很多用于服务器端代码的示例

    有关JWT的更多信息,您一定要查看我的文章:

    我还将为您提供一个链接,链接到Pluralsight上的非常好的课程,该课程让我对AngularJS、NodeJS和JWT认证有了很多了解:


    祝你好运:)

    你可能对我刚刚创建的回购感兴趣。它是一个基本的节点API,使用Json Web令牌进行令牌身份验证。正如其他一些人所说的,在创建用户或登录时,会在客户端创建并存储令牌。这将与每个请求一起在授权标头中发送,系统将确定该令牌的用户是否具有访问该端点的授权

    令牌是在

    /服务器/services/tokenAuth.js

    要保护端点,只需将已授权的添加到受保护的路由。这叫

    /服务器/policies/isAuthorized.js

    进行实际检查


    该回购协议仍在进行中,但应该能够帮助您开始使用JWT

    您始终可以为将要使用您的API的每个用户生成唯一的API密钥。然后,此密钥应该是每个请求的一部分,以便您可以检查它是否有效。但是如何在客户端保护此密钥?谢谢!这就是我正在寻找的。。但是如果你知道的话,告诉我一些事情。我在这里搜索,发现一个人说Express.js已经阻止了CORS。下面是一个关于在Express.js中启用CORS的好例子