1

我们正在编写一个提供 RESTful API 的应用程序。应用程序需要受到保护,但我不希望我的身份验证/加密机制污染接口程序或 API。

我想知道代理是否对我们的情况有所帮助,但由于我不是 Web 开发方面的专家,我需要知道我的图片是否有意义。系统结构应如下所示:

  1. 服务器程序只是在 TCP 端口上导出 API,但是只能从本地进程访问(绑定到127.0.0.1);

  2. 代理服务器管理 SSL 和身份验证:

    • URI 和方法按原样导出,但是……</li>
    • 只有经过身份验证且具有所需功能的用户才能真正调用它们,并且……</li>
    • 通信必须在加密通道上运行

所以,我的问题是:

  1. 这是一个合理的场景吗?

  2. 什么是我可以为这项工作运行的好的代理服务器?

  3. 这样做有什么缺点吗?

谢谢你的帮助!

4

1 回答 1

2

似乎可以通过使用 HTTPS反向代理来实现您所拥有的一般场景。那里有多种实现。

一个流行的是 Apache Httpd:它可以处理传入的 HTTPS 连接、身份验证(使用各种机制)和反向代理。

一个典型的场景是,你将有一个“普通”的 HTTP 应用程序监听localhost,它前面有 Apache Httpd 并处理外部连接,其中:

  • mod_ssl处理服务器的 SSL/TLS 配置。
  • 各种mod_auth*模块之一处理身份验证(取决于您要如何执行身份验证);这些应该能够将经过身份验证的用户名(例如REMOTE_USER)导出到后端进行授权。
  • mod_proxy处理与后端应用程序的连接(例如,mod_proxy_http当应用程序服务器使用 HTTP 本身时)。

仅让具有所需能力的用户执行某些操作是授权部分。这一个更难与您的主要 API 分开,因为前端无法猜测您如何定义“拥有所需的功能”。这并不是说您必须将它与您的其他逻辑纠缠在一起,但是授权系统需要知道您的 API 是如何工作的(即可能的操作是什么),因此它通常最好在主应用程序中实现。

于 2012-10-07T15:39:06.273 回答