【问题标题】:Hasura: Secure event triggers with serverless functionHasura:使用无服务器功能保护事件触发器
【发布时间】:2021-03-08 23:26:46
【问题描述】:
Hasura 建议开发人员使用无服务器函数作为事件触发器。事件触发器的工作方式是,当发出事件时,将调用特定的无服务器函数。但是,尽管 Hasura 处理身份验证和授权,但无服务器功能却没有。
我的解决方案是:
- 通过无服务器函数验证用户(使用从 Hasura 发送的给定会话变量)。
- 限制对无服务器功能的访问(只有 Hasura API 可以访问)。类似cors的东西。
关于哪个最好的想法?我个人认为第二个是最好的,但不知道能不能做到。
【问题讨论】:
标签:
event-handling
serverless
eventtrigger
hasura
【解决方案1】:
我会推荐以下组合:
- 在 Hasura 中的触发器上设置自定义标题
- 将 Serverless 功能限制为仅接受来自 Hasura 的功能(虽然我不确定域/IP 不会改变,也没有对此进行测试)
您可以检查supersecret 标头的存在并检查该值作为身份验证的一种方式。另请参阅IP,它是我的Hasura 云项目的IP 地址。这里我使用Pipedream 作为端点进行测试。
【讨论】:
-
如果您使用的是 aws ,那么您可以使用 aws apigateway API key 和 X-API-Key 作为 hasura 的标题,如下所示 [{"name": "X-API-Key","value": "X-API-Key","type": "env"}]
【解决方案2】:
如果我理解正确,您的解决方案可以解决不同的问题。
从无服务器函数验证用户(使用给定的会话
Hasura 发送的变量)。
如果您想验证导致事件触发的用户的身份,您最好使用操作。你可以secure actions easily in console。
限制对无服务器功能的访问(只有 Hasura API 可以访问)。
像cors这样的东西。
如果您想限制对无服务器功能的访问,您有多种选择,具体取决于您的提供商。您的选择包括: