我已经开发了一个web应用程序,它可以自己进行用户身份验证和会话管理。我在弹性搜索中保存了一些数据,现在想用基巴纳访问它。
Elasticsearch提供了一个没有任何身份验证的RESTful web,Kibana是一个纯浏览器端的Javascript应用程序,它通过直接的AJAX调用访问Elasticsearch。也就是说,没有"Kibana服务器“,只有静态HTML和Javascript。
我的问题是:如何最好地实现现有web应用程序和Elasticsearch之间的通用用户登录?
我对特定的Elasticsearch/Kibana解决方案感兴趣,但也对web应用程序和它们使用的外部web API的单点登录的通用设计感兴趣。
保护Elasticsearch/Kibana的推荐方法似乎是在前面有一个Apache或Nginx反向代理,用于SSL终止和用户身份验证(Basic )。但是,在我现有的web应用程序中,HTML表单用户身份验证并不能很好地发挥作用。理想情况下,我希望用户登录使用web应用程序,然后允许直接访问Elasticsearch。
到目前为止,我想出了解决办法:
请注意,这是一个单独的安装,所以我实际上不需要任何联邦的SSO解决方案。
我的感觉是,web应用程序(#1)中的代理是一个常见的通用解决方案,但考虑到Kibana直接使用Elasticsearch,让所有东西都通过这个可能比较慢的web应用程序似乎有点重量级。
我还没有找到为代理身份验证设置(#2)设计的开箱即用解决方案。我的想法是让web商店的会话信息出现在memcache之类的地方,并使用web服务器中的一些工具(Apache或Nginx)来基于cookie查找会话,并允许通过身份验证的代理访问。
这个问题似乎类似于直接使用web服务器(Apache或Nginx)提供静态文件,同时使用一个缓慢的web应用程序进行身份验证。不过,我找到的建议非常具体,比如X。
发布于 2014-12-09 05:36:56
你可以用sessionToken。这是一个相当通用的解决方案。让我来解释一下。当用户登录时,您存储一个随机字符串,并将其传递给他。每次用户试图与您的api交互时,您都会请求提供给他的会话令牌。如果匹配,你提供他要求的服务,否则,你就忽略他的电话。您应该使会话令牌在一定的时间间隔内过期,并在用户每次重新登录时创建一个新的会话令牌。
希望这能帮到你。
https://stackoverflow.com/questions/25286713
复制