【问题标题】:Reactivesearch proxylike backend with cookie authentication带有 cookie 身份验证的 Reactivesearch proxylike 后端
【发布时间】:2019-01-14 10:10:48
【问题描述】:

我有一个 spring 后端,我通过类似代理的端点访问我的 Elastic 搜索集群。该请求必须使用 cookie 进行授权。

我目前正在使用支持通过 withCredentials 标志验证请求的 searchkit。是否有类似的响应式搜索选项,或者是否有任何其他解决方案可以使用 cookie 授权请求?

我可以补充:后端公开了一个招摇的客户端,它在与我的前端客户端不同的域上运行。此客户端“拥有”cookie,因此我无法从前端客户端读取 cookie

【问题讨论】:

    标签: reactivesearch


    【解决方案1】:

    您可以使用ReactiveBase 中的headers 属性将自定义标头与请求一起传递。 Link 给文档。由于没有 withCredentials,您可以读取 cookie 并设置自定义标头以验证代理中间件的请求。

    <ReactiveBase
      ...
      headers={{
          customheader: 'abcxyz'
      }}
    >
        <Component1 .. />
        <Component2 .. />
    </ReactiveBase>
    

    Here 是一个示例代理服务器,但它在 NodeJS 中

    【讨论】:

    • 感谢您的回答。我已经看过关于自定义标题的部分,并且没有任何进展。读取 cookie 的问题是我的后端暴露了一个招摇的客户端,我使用它并在我的前端客户端之外的另一个域上运行 - 因此无法从前端客户端读取 cookie。
    • 您或许可以使用document.cookie 读取cookie 并通过headers 属性发送,然后在代理服务器上设置它们。
    • 无法读取位于不同域source的cookies
    • 对,好像这必须在库级别添加,在这里创建了一个问题github.com/appbaseio/appbase-js/issues/42 :)
    • 我可能已经找到了解决方案。将等待回答我的问题,直到我确认它有效。到目前为止,解决方案是劫持 beforeSend 道具并返回凭据:请求根级别的“包含”
    【解决方案2】:

    Okey 事实证明,Reactivesearch 使用 fetch 和 fetch want credentials: 'include' 进行 cookie 身份验证。这可能不会放在 Reactivesearch 提供的标头中,必须放在请求的根对象上。

    可以通过在 ReactiveBase 上实现 beforeSend 来做到这一点。

    const Base = ({ children }) => {
      const onBeforeSend = props => {
        return {
          ...props,
          credentials: 'include',
        }
      }
    
      return (
        <ReactiveBase
          app="app-name"
          url="url"
          beforeSend={onBeforeSend}
        >
          {children}
        </ReactiveBase>
      )
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 2019-05-17
      • 2016-08-15
      • 2017-10-19
      • 1970-01-01
      相关资源
      最近更新 更多