安全地解耦后端和前端(node.js服务器)

时间:2015-12-06 10:43:19

标签: node.js api rest websocket

我最近一直在关注node.js,REST API和WebSockets,以进一步了解后端和前端Web开发。尝试使用最佳实践我看到REST API一直出现。现在我的问题,我似乎不明白如何正确解决。

比如说我希望将客户端/服务器解耦,为此我在后端实现了一个REST API,以便我的前端访问并获取要呈现的数据。具体(想象)的例子:假设我想建立一个租赁服务网站。现在我希望我的前端有一个端点来访问有关某些产品的信息,比如说到目前为止租用的自行车数量。我希望能够在我的前端(通过REST API的帮助)显示这一点,但我不希望其他人称这个REST API能够获取数据(因为间谍活动是一项严肃的事情)而且我想把邪恶的东西拿走,是的,他们可以继续浏览,但是bla bla)。所以本质上我希望localhost机器能够访问(部分)REST API而不是其他任何人。事情变得复杂,因为我也希望人们能够在我的网站上创建一个用户,所以我希望有其他端点,然后可以不受限制地访问,因为我在想,如果在某些时候我会怎么样? d喜欢有一个与服务集成的移动应用程序。然后将所有请求限制为localhost

是不可行的

您如何构建一个安全的服务器/客户端?或者您认为将REST API暴露给其他人(邪恶的)并不是一件大事吗?

以上也适用于WebSockets。我知道REST API都很好而且整洁,但我认为未来存在于近实时连接中,因此我对WebSockets也感兴趣(当然,通过更高级别的模块,Socket.io,SockJS等)。

1 个答案:

答案 0 :(得分:0)

有许多解决方案可以保护您的API,其中许多都是开源的。您将使用哪一个真正取决于您的详细需求。

但是为了让你开始,我会提到一个非常被大社区接受和支持的解决方案:

查看JSON Web Token,例如在this Article中解释。

基本上,您的客户端从服务器请求身份验证令牌,然后将其存储在本地,以便在每次API请求时重复使用它。 另一方面,服务器可以根据需要保护您的API。这意味着您可能还有一个公共API,它不期望HTTP标头中有令牌。

代币也可能过期。例如,如果您允许新用户在您的网站上注册一段有限的时间,那么这很方便。

Here is another article解释了事情。

现在转到你问题的websocket部分。是的,你肯定也希望保护你的服务器端套接字。因此,请留意支持身份验证的库。我再次认为,有很多开源库。

提一句:Primus。 Primus是下面许多套接字库的抽象层,可让您快速更改套接字提供程序。但它也有一个可以实现的身份验证钩子。

猜猜是什么......你可以用它来检查JSON Web令牌!

希望这能让你开始。