6

根据文档,不应公开Admin REST APISyncGateway

引用:

默认情况下,Admin REST API 在端口 4985 上运行(除非您更改 adminInterface 配置参数)。不要暴露这个端口——它属于你的防火墙。任何可以访问此端口的人都可以免费访问和控制您的数据库和用户帐户。

这是有道理的,但我想知道如何授予在 Google AppEngine 上运行并处理注册/创建会话访问 API 而不会暴露它的应用程序服务器?是否有一个选项可以公开 Admin REST API,但限制对发送请求的特定服务器的访问或需要用户名/密码组合(如:8091端口上的 GUI)?

编辑

只是为了澄清,我将我的评论添加到问题中:

应用服务器(在 GAE 上运行)和 Couchbase 服务器(在 DigitalOcean 上运行)是两个不同的物理设备,因此具有不同的 IP 地址。意味着:我无法将我的adminInterface配置参数更改syncgateway_config.json为环回地址,因为从我的 GAE 服务器到 Couchbase 服务器的连接之后不会有任何影响。如果我没记错的话,服务器将无法从外部访问?!

4

5 回答 5

4

通常的期望是您的数据库服务器和其他需要管理员级别访问权限的服务器将位于同一主机上,或者位于防火墙后面的内部网络上。在后一种情况下,您可以安全地将管理端口绑定到内部网络。当然,您的防火墙规则将只允许外部连接到同步网关 (SG) 公共端口。

如果您的身份验证服务器位于完全不同的网络上,事情就会变得更加复杂。

一种可能性是在防火墙上使用更高级的选项,这样它就可以允许外部访问管理端口,但只能来自外部身份验证服务器。我可以想象的几种方法是(a)仅硬编码身份验证服务器的 IP 地址,(b)使用带有客户端证书的 SSL 连接,或(c)打开从身份验证服务器到 SG 服务器的 SSH 隧道。

另一种可能性是使用像 OAuth 这样的分布式身份验证系统,它旨在完成这种事情。因此,您的移动应用程序将与身份验证服务器通信以获取令牌,然后将令牌呈现给 SG,然后 SG 将令牌显示给身份验证服务器以对其进行验证。IIRC 我们在 SG 中还没有通用 OAuth 支持,因此您需要编写一个小型 OAuth 处理程序以在 SG 服务器上运行来完成这项工作。

[免责声明:我是 Couchbase 的架构师,曾在 Sync Gateway 上工作,但我现在只在 Couchbase Lite 上工作,所以我不是 SG 当前功能的专家!]

于 2016-02-01T17:13:22.187 回答
2

那么您的评论中的新信息需要得到解决。我不是这方面的专家,但我认为假设是身份验证服务和同步网关在同一台服务器上运行。如果不是事情变得稍微复杂一些,但我认为通过将同步网关配置的 adminInterface 部分更改为内部 IP 地址和端口(例如 192.168.3.2:4985)可能是可行的。

于 2016-01-31T06:51:16.080 回答
2

您可以在与同步网关(例如 nginx)相同的本地网络上安装 http 代理。

您可以将 nginx 配置为接受使用客户端证书进行身份验证的面向公众的 SSL 连接。

将同步网关配置为仅接受来自与 nginx 共享的本地网络的管理员连接。

将您的应用服务器配置为在通过 nginx 连接到同步网关时使用客户端证书。

这里有一篇很好的博客介绍了 nginx 客户端证书设置:http: //nategood.com/client-side-certificate-authentication-in-ngi

于 2016-02-01T17:11:51.073 回答
0

建议是将您需要的内容包装在身份验证服务中。这篇博文很好地解释了如何做到这一点: http: //ti.eng.br/configuring-your-very-first-couchbase-mobile-sync-backend/

于 2016-01-27T13:54:11.690 回答
0

文档中提到了这一点(如果我正确理解了这个问题)。在管理REST API 页面的管理 API 访问部分。

引用包含回答您的问题的部分:

API 可在不同的 TCP 端口上访问,这样可以轻松地将端口 4984 上的 Sync REST API 公开给端点,同时将端口 4985 上的 Admin REST API 保持在防火墙后面的安全。

如果要更改端口,可以在配置文件中进行。

要更改 Sync REST API 端口,请在配置文件中设置接口属性。

要更改 Admin REST API 端口,请在配置文件中设置 adminInterface 属性。

该属性的值是一个由冒号和端口号组成的字符串(例如:4985)。您还可以在冒号前添加主机名或数字 IP 地址,以仅绑定到具有该地址的网络接口。

作为一个有用的特殊情况,IP 地址 127.0.0.1 绑定到环回接口,使任何其他主机都无法访问该端口。这是管理界面的默认设置。

粗体字母表示您可以指定IP 端口以将其绑定到特定网络。

我认为这就是你所需要的。

于 2016-02-05T08:18:33.987 回答