Hasura:使用无服务器功能保护事件触发器

问题描述

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

我的解决方案是:

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

有没有想过哪一个是最好的?我个人认为第二个最好,但不知道能不能做到。

解决方法

我会推荐以下组合:

  1. 在 Hasura 的触发器上设置自定义标头 enter image description here
  2. 将 Serverless 功能限制为仅接受来自 Hasura(虽然我不确定域/IP 不会改变并且尚未对此进行测试)

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

enter image description here

,

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

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

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

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

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

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

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

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