繁体   English   中英

如何保护Node.js中的api路由

[英]How protect api routes in node.js

我试图找出最好的方法来保护JSON路由中的数据,这些数据将与客户端的我的角度控制器进行通信。

我有一些路由以JSON格式返回数据,下面举一个例子:

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

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

我进行了很多搜索,找到了两个答案,分别由域和令牌保护,所以..哪个是最合适的?

令牌如何保护起作用? 如果我发送一个任何人都可以在我的客户代码中找到的令牌,那将是无用的,对吗?

建议和基本解释;

对其余客户端使用基于令牌的身份验证。 您还可以为其余后端指定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编码的:

  • 第一个称为标头,其中包含有关令牌的一些基本信息。
  • 第二个是有效载荷。 这是您要在客户端和api之间传输的存储信息。 通常它是一个用户ID左右。 这样,api可以验证用户身份。
  • 第三部分是签名。 这是使令牌安全的部分。 签名由标头和仅由api知道的秘密编码的有效负载组成。

因此,JWT的生命周期非常简单:

  1. 您注册/登录用户,然后将JWT发送给客户端,该JWT存储在用户浏览器的本地或cookie存储中。
  2. 使用AngularJS,您可以制作一个拦截器,该拦截器将使用授权标头将每个请求将令牌发送到api。
  3. 在您要保护的每条路线的api中,您将使用中间件,该中间件将对JWT进行解码,并检查用户ID是否与数据库中的用户匹配。 这样一来,您就可以保护自己的路线免遭未经授权的请求。

您当然可以找到使用JWT的漂亮第三方库,AngularJS中的拦截器和Node.js中的中间件。

Satellizer是AngularJS的非常好的前端库,它为您提供简单的本地身份验证以及使用许多社交网络(如facebook,twitter,github等)的非常容易的身份验证。 它包括该拦截器,因此您无需自己编写它,并且它还包含许多服务器端代码示例。

有关JWT的更多信息,您绝对应该查看我的文章:基于Cookie的Json Web令牌进行身份验证

另外,我还将为您提供有关Pluralsight的非常好的课程的链接,该课程为我提供了有关AngularJS,NodeJS和JWT身份验证的很多知识: 使用Angular,Node和Token身份验证创建应用程序

祝好运 :)

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

这是回购

令牌是在

/server/services/tokenAuth.js

为了保护端点,您要做的就是将isAuthorized添加到受保护的路由中。 这叫

/server/policies/isAuthorized.js

做实际检查

此仓库仍在进行中,但应该可以帮助您开始使用JWT。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM