【发布时间】:2014-08-13 12:51:36
【问题描述】:
我开发了一个网络应用程序,它自己进行用户身份验证和会话管理。我在Elasticsearch 中保留了一些数据,现在想通过Kibana 访问它。
Elasticsearch 提供了一个无需任何身份验证的 RESTful Web API,而 Kibana 是一个纯粹的浏览器端 Javascript 应用程序,它通过直接 AJAX 调用访问 Elasticsearch。也就是说,没有“Kibana 服务器”,只有静态 HTML 和 Javascript。
我的问题是:如何最好地在现有网络应用和 Elasticsearch 之间实现普通用户登录?
我对特定的 Elasticsearch/Kibana 解决方案感兴趣,但也对单点登录 Web 应用程序及其使用的外部 Web API 的通用设计感兴趣。
似乎推荐的保护 Elasticsearch/Kibana 的方法是在前面使用 Apache 或 Nginx 反向代理来执行 SSL 终止和用户身份验证(基本身份验证)。但是,这与我现有 Web 应用程序中的 HTML 表单用户身份验证效果不太好。理想情况下,我希望用户使用 Web 应用程序登录,然后也可以直接访问 Elasticsearch API。
目前我想到的解决方案:
- 代理 Web 应用程序中的所有内容:让所有调用转到执行身份验证的 Web 应用程序(服务器),并让 Web 应用程序向 Elasticsearch Web API 发出相同的请求并将响应转发回浏览器。
- 让网络应用程序(服务器)存储会话信息,Apache 或 Nginx 可以通过某种方式查找并使用这些信息来授权对反向代理的访问。
- 放弃 Web 应用登录,对所有内容使用基本身份验证。
请注意,这是一次安装,所以我真的不需要任何联合 SSO 解决方案。
我的感觉是,Web 应用程序中的代理 (#1) 是一种常见的通用解决方案,但考虑到 Kibana 直接使用 Elasticsearch API,让一切都通过可能很慢的 Web 应用程序似乎有点重量级。
我还没有找到专为代理身份验证设置 (#2) 设计的开箱即用解决方案。我的想法是让 web 应用程序在 memcache 等中存储会话信息,并使用 web 服务器(Apache 或 Nginx)中的一些工具基于 cookie 查找会话,并在经过身份验证的情况下允许代理访问。
这个问题似乎类似于在使用慢速 Web 应用程序进行身份验证时直接使用 Web 服务器(Apache 或 Nginx)提供静态文件。然而,我发现的建议非常针对该问题,例如 X-Sendfile。
【问题讨论】:
-
我目前正在代理网络应用程序中的所有内容(#1),但仍然希望有人能提出一个漂亮的网络服务器内部解决方案(#2)。
标签: ajax security elasticsearch kibana