Nodejs从外部用户和内部进程访问路由

时间:2016-07-08 21:47:06

标签: node.js authentication routes passport.js

我有一个架构问题。

假设我有一条路线'/门票'。我可以使用护照轻松验证访问此路由的用户。我可以通过acl进一步保护这条路线。

现在让我们说我的内部应用程序或进程想要访问此相同的路由。我想我可能只有一个选择。我必须创建一个具有正确角色的单独用户/密码,并让我的内部应用程序或进程使用此单独的凭据对此路由进行HTTP调用。

那么,这是访问内部API的正确方法吗? 还有其他可能有用的建议吗?

谢谢

1 个答案:

答案 0 :(得分:0)

对于只能在内部访问的路线,有许多不同的选项:

  1. 在不同的端口上创建不同的服务器,但是在实现私有路由的同一进程中,阻止访问防火墙上的该端口。这是我最喜欢的选项,因为它很简单对。您在非标准端口(如8000或类似的东西)上创建第二个http服务器进程,并确保您的防火墙仅允许公共访问端口80或443.然后将所有内部路由放在端口8000服务器上。但是,由于它与您的公共服务器处于相同的过程中,您仍然可以访问所有数据。使用一个简单的防火墙规则(可能已经默认实现),您可以阻止访问所有私有路由。
  2. 验证所有路由,对内部路由使用不同的凭据。此处,您拥有一组内部保留的不同凭据,仅用于内部路由。由于外界没有人拥有这些证书,他们不应该使用它们。
  3. 阻止对网络级别的内部路由的公共访问。在此处,您可以使用代理或防火墙来阻止对网络级别的特定内部路由的访问。因此,如果您的传入防火墙看到/ admin / what的请求,它将阻止访问以/ admin开头的任何内容。内部路由可以与凭证一起使用,也可以不与凭证一起使用,但只能在服务器的专用网络中使用。他们无法从外面进入。
  4. 仅允许访问网络级别的已知公共路由。这与选项2相反。此处,您必须明确告知您的防火墙/代理允许公众访问哪些路由。
  5. 仅允许通过某些IP地址访问专用路由。如果源IP地址不是本地网络上的本地IP地址,则可以拒绝访问任何专用路由。这只是实现2或3的另一种方式。如果您愿意,这可以限制为仅允许从一个或非常特定数量的内部IP地址进行访问。
  6. 为了提高安全性,您还可以组合各种选项,这些选项有时可用于防止对您自己的基础架构的内部攻击,无论是来自恶意员工还是来自您自己专用网络上的其他受损基础架构。

    例如,您可以组合选项1,2和5.您将创建一个无法从公共互联网访问的单独服务器端口,并且您将使用仅内部凭据对每个请求进行身份验证只允许从特定的内部IP地址访问它。我并不是说你必须将所有这些结合起来,但我告诉你这些并非全部相互排斥。我最喜欢的是将1和2结合起来。

    仅供参考,如果您希望私有访问相同的功能,例如/tickets,但具有不同的访问权限,您可以使用仅在内部访问的第二台服务器(如上面选项1中所述)在其上有一个/tickets路由,具有不同的访问控制。两个独立的服务器可以共享所有相同的/tickets实现(只是将实现放在两者可以共享的功能中),除非它们在定义所需身份验证的两个服务器上具有不同的路由定义。您甚至可以让私有服务器在request对象上设置一个标志,该标志向您的代码的其余部分指示调用该路由的入口点(公共或私有),以便它可以根据该信息进行分支。 p>