ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Prisma CLI 命令实战:使用 `prisma token` 生成服务 API Token(JWT 签名原理与完整配置指南)

Prisma CLI 命令实战:使用 `prisma token` 生成服务 API Token(JWT 签名原理与完整配置指南) 后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载prisma token是 Prisma CLI 中用于为当前 Prisma 服务生成API Token的命令是客户端通过Authorization: Bearer请求头访问受保护 Prisma GraphQL API 的关键前置步骤。本文基于仓库中 prisma token 官方命令参考结合 CLI 与 prisma-yml 包源码完整讲解命令用法、prisma.yml中secret的配置方式以及 Token 的 JWT 签名与过期机制让你既能直接上手运行也能深入理解其底层原理。一、prisma token命令概述prisma token用于为当前 Prisma 服务生成一个新的API token。该 token 是一个 JWT。在 命令定义源码 中该命令的静态描述为Create a new service token属于token主题topic。它的核心执行逻辑是读取并加载当前目录下prisma.yml定义文件可通过--env-file注入环境变量从prisma.yml的endpoint中解析出service与stage读取prisma.yml中配置的secret签发对应服务的 JWT默认将 token 打印到终端或通过--copy写入系统剪贴板。使用场景服务端到服务端B2B鉴权在你的后端应用中调用 Prisma API 时需要在请求头携带 tokenGraphQL Playground 调试在 Playground 的 HTTP HEADERS 中填入Authorization即可带权访问受保护 API脚本与自动化在 CI/CD 或数据脚本中动态获取 token 后调用 Prisma API。二、命令语法与 Flagsprisma token [flags]Flags 一览Flag简写类型默认值说明--copy-cbooleanfalse将生成的 token 复制到系统剪贴板而非打印--env-file-estring无指定.env文件路径用于注入环境变量--project-pstring无指定 Prisma 定义文件prisma.yml的路径对应 token.ts 中的 flags 定义copy布尔型 flag用于控制输出方式env-file字符串型 flag对应 CLI 引擎中注入 env vars 的能力project字符串型 flag用于指向自定义位置的 Prisma 定义文件对应 Prisma CLI 体系中通用的--project参数。常用示例打印服务 token默认行为prisma token在包含prisma.yml的目录下执行CLI 读取prisma.yml中的secret属性并生成对应的 JWT 打印到终端见 Prisma API 认证文档。将 token 复制到剪贴板prisma token --copy执行后终端输出Token copied to clipboardtoken 已写入系统剪贴板可直接粘贴到 Playground 或 HTTP 客户端中。指定 .env 文件注入密钥prisma token --env-file .env当secret通过${env:MY_SECRET}引用环境变量且变量定义在.env文件中时可用此参数完成注入详见下文第三节。三、前置条件在prisma.yml中配置secretprisma token能否成功生成 token完全取决于prisma.yml中是否配置了secret。该属性定义了 Prisma 服务的API secret是签发 JWT 的签名密钥。3.1secret属性的配置语法依据 prisma.yml YAML 结构参考secret属性接受一个字符串不是字符串列表。若需配置多个 secret需以逗号分隔空格会被忽略但整体仍是一个字符串值。单个 secretsecret: moo4ahn3ahb4phein1eingaep多个 secret逗号分隔空格忽略secret: myFirstSecret, SECRET_NUMBER_2,3rd-secret从环境变量读取推荐避免密钥硬编码进版本库secret: ${env:MY_SECRET}3.2 源码级解析逻辑在 PrismaDefinition.ts 中CLI 加载定义文件时会将secret字符串去空格后按逗号拆分const secrets this.definition.secret this.secrets secrets ? secrets.replace(/\s/g, ).split(,) : null也就是说myFirstSecret, SECRET_NUMBER_2,3rd-secret会被解析为[myFirstSecret, SECRET_NUMBER_2, 3rd-secret]。而 token 签发时使用第一个 secretthis.secrets[0]进行签名因此多 secret 场景下请确认排在最前的是你希望用于当前签发的密钥。3.3 完整的最小prisma.yml示例endpoint: http://localhost:4466/myapi/dev datamodel: datamodel.graphql secret: mysecret123 # your API secret该示例同时出现在 Prisma API 认证概念文档 中。四、Token 的 JWT 签名原理4.1 服务 tokenprisma token的生成逻辑prisma token调用 PrismaDefinition.getToken(serviceName, stageName) 完成签发getToken(serviceName: string, stageName: string): string | undefined { if (this.secrets) { const data { data: { service: ${serviceName}${stageName}, roles: [admin], }, } return jwt.sign(data, this.secrets[0], { expiresIn: 7d, }) } return undefined }由此可以明确服务 token 的几个关键事实Payload 结构JWT 的data字段中包含service格式为服务名阶段名例如myapidev和roles: [admin]即该 token 默认携带admin 角色权限签名密钥使用prisma.yml中配置的第一个secret有效期expiresIn: 7d即7 天后过期需要重新签发无 secret 时的行为若prisma.yml未设置 secretgetToken返回undefined命令会输出提示There is no secret set in the prisma.yml见 token.ts。4.2 服务 token 与集群 token 的区别仓库中还存在一个相似的命令prisma cluster-tokencluster-token.ts二者容易混淆区别如下对比项prisma tokenprisma cluster-token描述Create a new service tokenCreate a new cluster token签发方CLI 本地使用secret签发向集群请求生成cluster.getToken依赖依赖prisma.yml的secret依赖集群的鉴权workspace、stage 等无权限时的表现输出提示“没有设置 secret”抛出Couldnt generate token错误集群 token 的生成路径在 Cluster.ts 中实现涉及PRISMA_MANAGEMENT_API_SECRET环境变量、HS256/RS256算法选择以及最长 5 年有效期的本地 tokenexpiresIn: 5y等逻辑。普通服务 API 鉴权场景下prisma token是更常用、更轻量的选择。五、Token 的典型使用方式5.1 通过Authorization请求头调用 Prisma APIPrisma API 的鉴权方式为在 HTTP 请求头中携带 token见 Prisma API 认证文档Authorization: Bearer __YOUR_API_TOKEN__5.2 在 GraphQL Playground 中配置在 Prisma API 的 GraphQL Playground 中点击左下角HTTP HEADERS区域填入{ Authorization: Bearer __YOUR_API_TOKEN__ }真实 token 示例JWT三段式结构header.payload.signature{ Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InNlcnZpY2UiOiJibG9nckBkZXYiLCJyb2xlcyI6WyJhZG1pbiJdfSwiaWF0IjoxNTE4NzE2NjA4LCJleHAiOjE1MTkzMjE0MDh9.zqBh_Oo4RmV4j3UQeVDYqJDxV-YHQiOR-XIlhjbWejw }将prisma token生成的 token 粘贴到此处即可完成鉴权之后 Playground 中的所有查询、变更与订阅请求都会携带该凭证。5.3 在应用代码中的典型用法在 Node.js 等服务端应用中可通过环境变量保存 token 并在每次请求时注入请求头考虑到 token 有效期仅为 7 天生产环境通常配合定时刷新重新执行签发或使用更长有效期的集群凭证。六、注意事项与常见问题未配置 secret 时执行prisma token会得到提示There is no secret set in the prisma.yml不会输出 token。请在prisma.yml中补充secret配置后重试。secret 安全性secret相当于 API 的签名密钥请勿提交到公开版本库。推荐使用${env:PRISMA_SECRET}引用环境变量并配合--env-file参数在运行时注入。token 过期服务 token 有效期为 7 天过期后需重新执行prisma token获取。多 secret 场景签发时使用逗号分隔列表中的第一个 secret配置多个 secret 时请留意顺序。角色权限prisma token生成的 token 默认携带admin角色roles: [admin]具有该服务的完整管理权限请妥善保管。七、深入阅读prisma token 官方命令参考本文所依据的原始命令文档Prisma API 认证概念API secret 与 API token介绍 secret 与 token 的关系及 Playground 鉴权操作prisma.yml YAML 结构参考secret属性的完整语法与多 secret 示例token 命令源码prisma token的命令实现与 flag 定义PrismaDefinition.getToken 实现服务 token 的 JWT 签名、payload 与过期时间Cluster.getToken / getLocalToken 实现集群 token 的生成逻辑便于与服务 token 对比。赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐Prisma CLI prisma token 命令详解生成服务级 JWT API TokenPrisma CLI prisma token 命令详解生成服务级 JWT API Token prisma token 是 Prisma CLI 中用于为当后端数据库GraphQLPrisma CLI prisma token 命令详解用 API Secret 签发服务 API TokenJWTPrisma CLI prisma token 命令详解用 API Secret 签发服务 API TokenJWT 导读 prisma token 是后端数据库GraphQLPrisma CLI prisma token 命令完全指南生成服务令牌Service Token / JWTPrisma CLI prisma token 命令完全指南生成服务令牌Service Token / JWT 本指南系统讲解 Prisma CLI 中用后端数据库GraphQL上一篇罗马尼亚语AI模型终极对比bert-base-romanian-cased-v1与其他模型的优劣分析下一篇微信SDK接入Unity快速实现社交功能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表