jwt - 带有 RS256 加密 JWT 的 PostGraphile“无效算法”错误
问题描述
我在节点项目中使用带有 PostGraphile 4.6.0 的 JWT 验证。这是代码片段:
createServer(
postgraphile(env.DATABASE_URL, "public", {
jwtVerifyAlgorithms: ["RS256"],
jwtSecret: "./publickey.pem",
jwtPgTypeIdentifier: "public.jwt_token",
rejectUnauthorized: false,
graphiql: true,
enhanceGraphiql: true,
graphqlRoute: env.POSTGRAPHILE_ROUTE + "/graphql",
graphiqlRoute: env.POSTGRAPHILE_ROUTE + "/graphiql",
})).listen(port, () => {
console.log("Listening at port:" + port);});
但是当我使用 Postman 发送 RS256 加密的 JWT 令牌时,得到错误:
{
"errors": [
{
"message": "invalid algorithm"
}
]
}
我在 Postgres 中创建了一个函数来返回 JWT 令牌,它总是返回 HS256 加密的 JWT 令牌。并且 II 在 Postman 中使用 PostGraphile 返回 HS256 加密的 JWT 令牌,JWT 令牌被验证并且 GrqphQL 查询返回正常。
看来“jwtVerifyAlgorithms”选项没有生效。
有没有办法让 RS256 加密的 JWT 令牌工作?
解决方案
Postgraphile文档指出jwtPublicKey
提供秘密的正确设置。现在您正在使用不会jwtSecret
加载文件的字符串"./publickey.pem"
,而是使用文件路径作为密码。确保使用以下内容自己加载文件:
...
jwtPublicKey: fs.readFileSync("./secretkey.pem", "ascii")
...
通过 pgSettings 替代
在最坏的情况下,您还可以提供pgSettings
使用jsonwebtoken
npm 库的自定义函数并自己验证令牌并将其写入您的设置。
推荐阅读
- python - “in”运算符没有按预期工作?(python)
- indexeddb - IndexedDB 不适用于 Microsoft Teams 的 Android 应用程序
- javascript - 在Angular 7 SSR中从服务器端渲染弹出内容
- php - 在 cronjob 上运行的 Telegram PHP Bot,如何提示
- python - 如何在 django rest 框架中的双嵌套序列化程序中发布和更新数据
- node.js - 在 Angular 中打印 json 的特定信息
- c - 在kali linux中运行时出现分段错误 - 客户端和服务器聊天室
- java - java并发-保持某些任务之间的顺序
- javascript - 从 google api 请求 OAuth 令牌时找不到帐户
- sql - 如何从包含团队子团队的表格中获取所有子团队?