我在一个节点项目中使用了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令牌。我在Postman中使用了PostGraphile返回的HS256加密的JWT令牌,验证了JWT令牌,并且GrqphQL查询返回了正确的结果。
选项"jwtVerifyAlgorithms“似乎没有生效。
有没有办法对RS256加密的JWT令牌起作用?
发布于 2020-12-07 01:37:24
Postgraphile documentation声明jwtPublicKey是用于提供密钥的正确设置。现在,您正在使用带有字符串"./publickey.pem"的jwtSecret,它不会加载文件,而是使用文件路径作为密码。确保使用类似以下内容自己加载该文件:
...
jwtPublicKey: fs.readFileSync("./secretkey.pem", "ascii")
...通过pgSettings的替代方案
最坏的情况您还可以提供一个使用jsonwebtoken npm库的自定义pgSettings函数,自己验证令牌并将其写入您的设置。
https://stackoverflow.com/questions/61491193
复制相似问题