Javascript 使用快速私人路线进行反应

Javascript 使用快速私人路线进行反应,javascript,node.js,reactjs,express,Javascript,Node.js,Reactjs,Express,我主要使用服务器端渲染解决方案将数据从服务器传递到客户端,并在浏览器中进行渲染 这样做的一些主要好处包括能够获取数据并将其传递给客户机,而无需公开公开的路由。所以能够隐藏数据,并且只在我想要的时候才公开。我知道Facebook等其他应用程序的数据只能由其应用程序(iOS、Android、web应用程序)接收。例如,时间线数据不是公共路线,只能由其自己的应用程序接收 如何使用React实现类似的功能?通过服务器端呈现,我可以锁定这些函数/路由,只允许从后端代码调用它们,而不公开它们,我还可以执行检

我主要使用服务器端渲染解决方案将数据从服务器传递到客户端,并在浏览器中进行渲染

这样做的一些主要好处包括能够获取数据并将其传递给客户机,而无需公开公开的路由。所以能够隐藏数据,并且只在我想要的时候才公开。我知道Facebook等其他应用程序的数据只能由其应用程序(iOS、Android、web应用程序)接收。例如,时间线数据不是公共路线,只能由其自己的应用程序接收

如何使用React实现类似的功能?通过服务器端呈现,我可以锁定这些函数/路由,只允许从后端代码调用它们,而不公开它们,我还可以执行检查以确保用户已登录等操作


如何使用React实现这一点?

据我所知,您希望将某些路由限制为登录用户

对于使用Facebook等身份提供商登录,goto是passport.js。关于使用react/express/passport的问题以前曾被问过,例如

根据评论进行编辑:

因此,您有一些输出数据的函数。如果渲染服务器端,则这些函数不会公开。但是,如果您通过API公开它们。。。它们暴露在外。由于JavaScript代码被发送到客户端,所以不能只在头中添加一个秘密,因为必须将该秘密发送到客户端

我上面说的是,如果您将这些API限制为登录的用户,那么OAuth和/或JWTs(一个la)就可以解决这个问题。JWTs也可以在不登录的情况下为您工作

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

  • 使用HTTPS
  • 将CORS策略设置为仅允许您的域
  • 使用类似于

另一件我没有用过但看起来不错的东西是

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

让我从一个非常抽象的高度来描述这一点:

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

然而,您必须考虑到,没有纯Web应用程序是100%安全的,也就是说,在纯Web应用程序中,没有任何手段可以保护上述客户机的机密性100%的确定性。为此,您还应该使用密码等实现另一个身份验证流。。。否则,您还必须实现某种服务器端代理,使机密在服务器端保持安全,并将令牌返回给客户端

如果您使用第三方API来限制访问,则需要在两者之间放置一个代理或API网关,以执行上述访问控制。因此,这意味着可以通过这种方式访问的路由不应该暴露任何敏感数据,例如用户数据


我希望这些想法能在某种程度上帮助您为您的问题找到合适的体系结构

我不确定我是否完全理解。你想限制授权应用程序访问部分/全部api,还是想将api隐藏在服务器外部无法访问的“墙”后面?@SrThompson。我只希望登录用户访问某些路由。还有一些我想躲在只有我的服务器/应用程序才能访问的墙后面的路线。有些我两者都想要。您很可能必须将您的系统架构成单独的服务。为了确保只有您的react应用程序(或您授权的任何其他客户端)可以访问您的路由,您可以实现oauth2。在客户端,如果您使用的是react router之类的东西,则只将路由限制为经过身份验证的用户是很简单的。如果您真的想隐藏路由并取决于您的环境,则服务之间的内部通信更为复杂。您可以使用消息队列(例如RabbitMQ)或将服务置于同一物理服务器中。。。(免责声明:我从未实施过这样的系统)汤普森找到了正确的解决方案。你真的想提供完整的示例代码给一个可能的黑客关于你的管理/受限服务是如何工作的?为什么不部署同一个“完整”应用程序的两个不同版本,只排除不需要的部分呢。如果它在客户机上运行,如果它做出决策,那么它对客户机端是可用的。显然,您仍然可以对数据进行服务器端筛选(安全性),并基于此反映状态。React在浏览器中运行。后端在服务器上运行。确保后端安全,客户就没事了。@DanielB.Chapman所以我有点理解你的意思。我的意思是,任何对客户端可用的东西几乎都可以被查看、黑客攻击或访问。在类似移动开发的情况下,东西更受限制,而且更容易保护东西,因为它是二进制的。但我仍然对如何保护这些路线感到困惑。就像我有不同的构建,一个用于公共路线,一个用于私人路线。谁能说有人不能直接攻击私人建筑?这几乎就像我想要一个密钥或令牌来表示HTTP请求只来自我的应用程序和我的应用程序。不是真的。我的意思是这是其中的一部分。但我已经明白了。这就是一个例子。假设我有一个天气应用程序。通过服务器端渲染,我可以使用Javascript函数获取天气数据,然后使用pas