【问题标题】:Web app authentication and securing a separate web API (elasticsearch and kibana)Web 应用程序身份验证和保护单独的 Web API(elasticsearch 和 kibana)
【发布时间】: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。

目前我想到的解决方案:

  1. 代理 Web 应用程序中的所有内容:让所有调用转到执行身份验证的 Web 应用程序(服务器),并让 Web 应用程序向 Elasticsearch Web API 发出相同的请求并将响应转发回浏览器。
  2. 让网络应用程序(服务器)存储会话信息,Apache 或 Nginx 可以通过某种方式查找并使用这些信息来授权对反向代理的访问。
  3. 放弃 Web 应用登录,对所有内容使用基本身份验证。

请注意,这是一次安装,所以我真的不需要任何联合 SSO 解决方案。

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

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

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

【问题讨论】:

  • 你可以使用github.com/sonian/elasticsearch-jetty插件。
  • 我目前正在代理网络应用程序中的所有内容(#1),但仍然希望有人能提出一个漂亮的网络服务器内部解决方案(#2)。

标签: ajax security elasticsearch kibana


【解决方案1】:

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

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2014-06-15
    • 2015-04-07
    相关资源
    最近更新 更多