我开发了一个自己的用户身份验证和会话管理的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。
到目前为止我已经想过的解决方案:
请注意,这是一次安装,因此我并不需要任何联合SSO解决方案。
我的感觉是Web应用程序中的代理(#1)是一种常见的通用解决方案,但考虑到Kibana直接使用Elasticsearch API,让所有内容都通过可能很慢的Web应用程序似乎有点重量级。
我还没有找到专为代理验证设置(#2)设计的开箱即用解决方案。我的想法是让web应用程序在memcache等中存储会话信息,并使用Web服务器(Apache或Nginx)中的一些工具来查找基于cookie的会话,并在验证时允许代理访问。
该问题类似于使用Web服务器(Apache或Nginx)直接提供静态文件,同时使用慢速Web应用程序进行身份验证。我发现的建议对于该问题非常具体,例如X-Sendfile。
答案 0 :(得分:0)
您可以使用sessionToken。这是一个非常通用的解决方案。让我解释一下。当用户登录时,您存储一个随机字符串并将其传回给他。每次用户尝试与您的api进行交互时,您都会要求提供给他的会话令牌。如果它匹配,你提供他要求的服务,否则你只是忽略他的电话。您应该使会话令牌在特定时间间隔内到期,并在每次用户重新登录时创建一个新会话令牌。
希望这会对你有所帮助。