【问题标题】:How to secure prisma endpoint deployed to heroku如何保护部署到heroku的prisma端点
【发布时间】:2019-11-05 01:13:26
【问题描述】:

我将 prisma PostgreSQL 和瑜伽服务器部署到 heroku,

但 graphql 端点是公共的,任何人都可以从它变异。

有没有像 hasura 那样直接的方法: https://docs.hasura.io/1.0/graphql/manual/deployment/securing-graphql-endpoint.html

PS:我没有使用 docker 来部署它,我通过 prisma 向导将所有内容部署在:prisma console

【问题讨论】:

    标签: heroku graphql prisma


    【解决方案1】:

    您需要一个 Prisma“机密”来保护您的端点,以便只有您和您的应用程序可以访问/更改数据。 Prisma 将此称为managementApiSecret(参见here)。

    我对 Prisma 控制台不是很熟悉,但是如果您使用 prisma.yml 文件将 Prisma 服务器部署到 Heroku,那么您可以像这样指定 secret: 行:secret: ${env: PRISMA_SECRET}。然后,您可以在 Heroku 上的 Prisma 服务器的设置中设置一个 Config Var,其中键是 PRISMA_SECRET,值是随机字符串。我相信您在使用prisma deploy 命令时也想做同样的事情。所以你prisma.yml 应该是这样的:

    endpoint: ${env:PRISMA_ENDPOINT_PROD}
    datamodel: datamodel.graphql
    secret: ${env:PRISMA_SECRET}
    hooks:
      post-deploy:
          - graphql get-schema -p prisma
    

    然后,您需要在 Yoga 服务器中指定相同的密钥,以便它可以访问 Prisma 服务器。如果没有看到 Yoga 服务器的代码,很难帮助您解决这个问题,但我的使用 prisma-binding 包,如下所示:

    const { Prisma } = require('prisma-binding');
    
    const db = new Prisma({
        typeDefs: 'src/generated/prisma.graphql',
        endpoint: process.env.PRISMA_ENDPOINT_PROD,
        secret: process.env.PRISMA_SECRET,
        debug: false, // Turn on to console.log queries and mutations
    });
    
    module.exports = db;
    

    您可以看到 Yoga 服务器使用指定的密钥连接到 Prisma 数据库。 Yoga 服务器部署在 Heroku 上,我在 Yoga 服务器的 Heroku 设置中指定了 PRISMA_SECRET 环境变量。

    但此设置将阻止您在浏览器中访问 Prisma 端点并通过 GraphQL 游乐场手动查询和更改数据库中的数据。可能有办法解决这个问题,但我不确定如何。另请注意,这不会为您提供 Hasura 似乎为您提供的漂亮登录界面。

    如果您想了解更多代码,可以查看 Wes Bos 的这个 GitHub repo,这是他在名为“Fullstack Advanced React & GraphQL”的课程中使用的。

    【讨论】:

    • 感谢斯宾塞的回复,我的网站建立在 Wes Bos 所做的基础之上,几乎相同的设置,但我仍然面临同样的问题。这就是我解决问题的方法,可能不如使用 managementApiSecret 安全。但它做了我想要的。 GraphQLServer 的启动函数有一个名为“playground”的选项,您可以将其设置为 false 以不显示 Playground。
    猜你喜欢
    • 2018-11-29
    • 2020-10-17
    • 2012-08-29
    • 2020-11-30
    • 1970-01-01
    • 2021-05-13
    • 2018-08-02
    • 2016-02-04
    相关资源
    最近更新 更多