Web应用程序身份验证和保护单独的Web API(elasticsearch和kibana)

时间:2014-08-13 12:51:36

标签: ajax security elasticsearch kibana

我开发了一个自己的用户身份验证和会话管理的Web应用程序。我在Elasticsearch中保留了一些数据,现在想要使用Kibana访问它。

Elasticsearch提供RESTful Web API,无需任何身份验证,Kibana是一个纯粹的浏览器端Javascript应用程序,可通过直接的AJAX调用访问Elasticsearch。也就是说,没有" Kibana服务器",只是静态HTML和Javascript。

我的问题是:如何在现有网络应用和Elasticsearch之间最好地实现普通用户登录?

我对特定的Elasticsearch / Kibana解决方案感兴趣,但也对单点登录到网络应用程序和他们使用的外部Web API的通用设计感兴趣。

安全Elasticsearch / Kibana的推荐方法似乎是在前面安装一个Apache或Nginx反向代理来执行SSL终止和用户身份验证(基本身份验证)。但是,在我现有的网络应用程序中,HTML格式用户身份验证并不能很好地发挥作用。理想情况下,我希望用户使用Web应用程序登录,然后也可以直接访问Elasticsearch API。

到目前为止我已经想过的解决方案:

  1. 代理Web应用程序中的所有内容:让所有调用都转到执行身份验证的Web应用程序(服务器),让Web应用程序向Elasticsearch Web API发出相同的请求,并将响应转发回浏览器。 / LI>
  2. 让网络应用程序(服务器)存储Apache或Nginx以某种方式查找并用于授权访问反向代理的会话信息。
  3. 沟渠网络应用登录并使用基本身份验证。
  4. 请注意,这是一次安装,因此我并不需要任何联合SSO解决方案。

    我的感觉是Web应用程序中的代理(#1)是一种常见的通用解决方案,但考虑到Kibana直接使用Elasticsearch API,让所有内容都通过可能很慢的Web应用程序似乎有点重量级。

    我还没有找到专为代理验证设置(#2)设计的开箱即用解决方案。我的想法是让web应用程序在memcache等中存储会话信息,并使用Web服务器(Apache或Nginx)中的一些工具来查找基于cookie的会话,并在验证时允许代理访问。

    该问题类似于使用Web服务器(Apache或Nginx)直接提供静态文件,同时使用慢速Web应用程序进行身份验证。我发现的建议对于该问题非常具体,例如X-Sendfile。

1 个答案:

答案 0 :(得分:0)

您可以使用sessionToken。这是一个非常通用的解决方案。让我解释一下。当用户登录时,您存储一个随机字符串并将其传回给他。每次用户尝试与您的api进行交互时,您都会要求提供给他的会话令牌。如果它匹配,你提供他要求的服务,否则你只是忽略他的电话。您应该使会话令牌在特定时间间隔内到期,并在每次用户重新登录时创建一个新会话令牌。

希望这会对你有所帮助。