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

标签 ajax security elasticsearch kibana

我已经开发了一个网络应用程序,它可以执行自己的用户身份验证和 session 管理。我将一些数据保留在Elasticsearch中,现在想使用Kibana进行访问。

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

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

我对特定的Elasticsearch / Kibana解决方案感兴趣,但对单点登录Web应用程序及其使用的外部Web API的通用设计感兴趣。

似乎推荐的保护Elasticsearch / Kibana的方法是在前面使用Apache或Nginx反向代理来执行SSL终止和用户身份验证(基本身份验证)。但是,这与我现有的Web应用程序中的HTML表单用户身份验证不太兼容。理想情况下,我希望用户使用Web应用程序登录,然后也可以直接访问Elasticsearch API。

到目前为止,我想到的解决方案是:

  • 代理Web应用程序中的所有内容:让所有调用转到进行身份验证的Web应用程序(服务器),并使Web应用程序向Elasticsearch Web API发出相同的请求,并将响应转发回浏览器。
  • 让Web应用程序(服务器)存储 session 信息,Apache或Nginx可以通过某种方式查找这些 session 信息并用于授权对反向代理的访问。
  • Ditch Web应用程序登录并使用基本身份验证进行所有操作。

  • 请注意,这是单个安装,因此我真的不需要任何联合SSO解决方案。

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

    我还没有找到专为代理身份验证设置(#2)设计的现成解决方案。我的想法是让Web应用程序将 session 信息存储在Memcache等中,并使用Web服务器(Apache或Nginx)中的某种功能来基于cookie查找 session ,并允许经过身份验证的代理访问。

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

    最佳答案

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

    希望这对您有所帮助。

    关于ajax - Web应用程序身份验证并保护单独的Web API(elasticsearch和kibana),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25286713/

    相关文章:

    javascript - 在javascript中解析粘在一起的json

    基于商品价格和总价的 Javascript 计算器

    php - 如何防止 PHP 中的 SQL 注入(inject)?

    ios - 数据保护功能是否也会在 Core Data 的幕后保护 sqlite 文件?

    node.js - 在 Node.js 中构建 "Filter Proxy"

    jquery - 如何在此图表js中添加逗号

    c# - 带有异步 Ajax 请求的同步 ActionFilter

    javascript - 如何判断是否是我的客户端访问我的服务器?

    java - 使用 Java API 的 ElasticSearch 日期范围查询聚合

    elasticsearch - curl 无法获取数据