与Express Private Routes一起反应

时间:2017-09-16 17:33:10

标签: javascript node.js reactjs express

我主要使用服务器端呈现解决方案将数据从服务器传递到客户端并在浏览器中呈现。

这样做的一些主要好处包括能够获取数据并将其传递给客户端,而不会暴露公开的路由。因此能够隐藏数据并且只在我想要的时候公开它。我知道其他应用程序(如Facebook)的数据只能通过其应用程序(iOS,Android,Web应用程序)接收,例如时间轴数据不是公共路径,只能由自己的应用程序接收。

如何使用React实现这样的目标?使用服务器端渲染,我可以锁定这些函数/路由,只允许从后端代码调用它们而不暴露它们,我还可以执行检查以确保用户已登录等等。

如何使用React实现这一目标?

2 个答案:

答案 0 :(得分:1)

据我了解,您希望将某些路由限制为登录用户。

使用Facebook等身份提供商登录时,goto是passport.js。关于使用反应/快递/护照的问题之前已经被问过,例如here

回复评论时编辑:

所以,你有一些输出数据的函数。如果渲染服务器端,则不会公开这些功能。但是,如果您通过API公开它们......它们会暴露出来。并且由于JavaScript代码被发送到客户端,因此您不能将秘密放入标头中,因为您必须将该秘密发送给客户端。

我上面所说的是,如果您将这些API限制为登录用户,则问题由OAuth和/或JWT解决,即this。 JWTs coukd也可以在没有登录的情况下为你工作。

但是,如果你要做的是让API对应用程序的请求开放,无论用户是否登录,我都不知道任何完美的解决方案,只是一些技巧:

  • 使用HTTPS
  • 将CORS策略设置为仅允许您的域
  • 使用Helmet
  • 等软件包

另一件值得检查的事情是,我还没有使用,但看起来不错Microgateway

答案 1 :(得分:1)

这通常使用身份验证/授权的不同概念来解决,例如OAuth2协议中定义的。

让我在非常高和抽象的层面上描述这个:

您可以说有不同的客户端可以访问您的API。 API可以定义哪个客户端可以访问哪条路由。 每个客户端都有一个客户端ID和一个客户端密钥,用于向身份验证服务器标识自己,并根据令牌交换ID和密钥。此令牌(例如Json Web Token)对此客户端的权限进行编码,这可能意味着访问API中的某些路由,而不是其他路由。

但是,您必须考虑到没有纯Web应用程序100%安全,即在纯Web应用程序中无法100%确定地保护上述客户机密钥。为此,您还应该使用密码等实现另一个身份验证流程...否则,您还必须实现某种服务器端代理,以便在服务器端保密,并将令牌返回给客户。

如果您使用要限制访问的第三方API,则需要在其间放置代理或API网关,这将执行上述访问控制。因此,这意味着可以以这种方式访问​​的路由不应该发布任何敏感数据,例如用户数据。

我希望这些想法可以帮助您找到适合您问题的正确架构。