如何保护node.js

时间:2015-07-27 06:14:04

标签: javascript json angularjs node.js

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

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

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

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

我正在搜索很多,我找到了两个答案,通过域名和令牌保护,所以......哪一个是正确的?

令牌保护如何起作用?如果我发送任何人都可以在我的客户端代码中找到的令牌,那就没用了,对吧?

3 个答案:

答案 0 :(得分:2)

建议和基本解释;

为您的其他客户端使用基于令牌的身份验证。此外,您还可以为休息后端指定cors过滤器。

在您的cors过滤器中指定Access-Control-Allow-Origin以仅允许您的域,因此在客户端用户知道令牌但是另一个域或本地他/她不能发送任何请求限制区域。

ActiveLayer

使用授权标头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

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

答案 1 :(得分:1)

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

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

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

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

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

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

    有关JWT的更多信息,请务必查看我的文章:Json Web Tokens over Cookies for authentication

    我还会给你一个关于Pluralsight非常好的课程的链接,它给了我很多关于AngularJS,NodeJS和JWT认证的知识:Creating Apps With Angular, Node, and Token Authentication

    祝你好运:)

答案 2 :(得分:0)

您可能对我刚创建的回购感兴趣。它是一个基本节点API,使用Json Web Tokens进行令牌认证。其他一些人所说的想法是在创建用户或登录时,创建令牌并存储在客户端。这是在每个请求的Authorization标头中发送的,系统会确定该标记的用户是否有权访问该端点。

Here's the repo

中生成标记
  

/server/services/tokenAuth.js

要保护端点,您只需将 isAuthorized 添加到受保护的路由即可。这叫

  

/server/policies/isAuthorized.js

进行实际检查

这个回购仍在进行中,但应该可以帮助您开始使用JWT。