【问题标题】:Hasura: Secure event triggers with serverless functionHasura:使用无服务器功能保护事件触发器
【发布时间】:2021-03-08 23:26:46
【问题描述】:

Hasura 建议开发人员使用无服务器函数作为事件触发器。事件触发器的工作方式是,当发出事件时,将调用特定的无服务器函数。但是,尽管 Hasura 处理身份验证和授权,但无服务器功能却没有。

我的解决方案是:

  1. 通过无服务器函数验证用户(使用从 Hasura 发送的给定会话变量)。
  2. 限制对无服务器功能的访问(只有 Hasura API 可以访问)。类似cors的东西。

关于哪个最好的想法?我个人认为第二个是最好的,但不知道能不能做到。

【问题讨论】:

    标签: event-handling serverless eventtrigger hasura


    【解决方案1】:

    我会推荐以下组合:

    1. 在 Hasura 中的触发器上设置自定义标题
    2. 将 Serverless 功能限制为仅接受来自 Hasura 的功能(虽然我不确定域/IP 不会改变,也没有对此进行测试)

    您可以检查supersecret 标头的存在并检查该值作为身份验证的一种方式。另请参阅IP,它是我的Hasura 云项目的IP 地址。这里我使用Pipedream 作为端点进行测试。

    【讨论】:

    • 如果您使用的是 aws ,那么您可以使用 aws apigateway API keyX-API-Key 作为 hasura 的标题,如下所示 [{"name": "X-API-Key","value": "X-API-Key","type": "env"}]
    【解决方案2】:

    如果我理解正确,您的解决方案可以解决不同的问题。

    从无服务器函数验证用户(使用给定的会话 Hasura 发送的变量)。

    如果您想验证导致事件触发的用户的身份,您最好使用操作。你可以secure actions easily in console

    限制对无服务器功能的访问(只有 Hasura API 可以访问)。 像cors这样的东西。

    如果您想限制对无服务器功能的访问,您有多种选择,具体取决于您的提供商。您的选择包括:

    • 添加一些特殊的标头并在每个函数中验证 this answer

      • 这是最简单的解决方案,但相当乏味。至少使用某种中间件来避免代码重复
    • 将函数隐藏在代理后面,它将执行验证

    • 如果可以,请为您的函数指定允许的主机列表(您的 hasura 实例正在运行的位置)

    【讨论】:

      猜你喜欢
      • 2022-09-23
      • 2020-08-27
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多