我正在使用 Auth0 和 Apollo Server 4(刚刚更新到新版本)并且由于某种原因我在验证我的不记名令牌时收到此错误:“JsonWebTokenError:jwt malformed”
文档说这是因为“令牌没有三个组件(由 . 分隔)”,而且我的令牌似乎缺少一个组件,因为其中有两个“..”。
这里是持票人“eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIiwiaXNzIjoiaHR0cHM6Ly9kZXYteWpkczdzMHcudXMuYXV0aDAuY29tLyJ9..ra0kpvVLjOY5SXNL.QcHMSTrOB1gew FkjwJdg3MHCr0UfdS0tKA2XdskUKp8_10puH_oq6meSs9x6f_LDZHeYfJso8QaofxDhNvlpWU2zQFbmPD_tJtTui4jCqNFpYM6Aapw6d7ADeckl0vjsBVs9AdJHUF_6tlBtI6s8Qk6r 4UtufKSGfpm5ucb2FeCz-9DREH19QGCBzundoi5goSKK4Br8VhZTrP89KZDwQYSYWR-SXXrAUSz3mhDPbYQjrPeyVZtt4WCHwgCweF-iLHkMI6g82zKYbNUHimfcSZcmNgYS3sTL6MkKLKr9o OkgLyR0KDA2r22vKracFdoZB0g.Lk0ClIc1usAEXFaGzO-hDg"
这是我的服务器代码:
import { ApolloServer } from '@apollo/server';
import { startStandaloneServer } from '@apollo/server/standalone';
import resolvers from './graphql/Resolvers.js';
import { typeDefs } from './graphql/gqlSchema.js';
import verifyToken from './verifyToken.js';
import config from './config.cjs';
import startMongo from './Mongo/StartMongo.js';
const server = new ApolloServer({
cors: { origin: 'https://www.timerwise.com' },
typeDefs,
resolvers,
});
const { url } = await startStandaloneServer(server, {
context: async ({ req }) => {
let isAuthenticated = false;
let token;
try {
const authHeader = req.headers.authorization || '';
if (authHeader) {
const token = authHeader.split(' ')[1];
const payload = await verifyToken(token);
isAuthenticated = payload && payload.sub ? true : false;
}
} catch (error) {
console.error(error);
}
return { req, auth: { token, isAuthenticated } };
},
listen: { port: config.PORT },
});
startMongo();
console.log(`🚀 Server ready at ${url}`);
这是我的令牌验证码:
import jwt from 'jsonwebtoken';
import jwksClient from 'jwks-rsa';
import config from './config.cjs';
const verifyToken = async (bearerToken) => {
const client = jwksClient({ jwksUri: `https://${config.AUTH0_DOMAIN}/.well-known/jwks.json` });
function getJwksClientKey(header, callback) {
client.getSigningKey(header.kid, function (error, key) {
const signingKey = key.publicKey || key.rsaPublicKey;
callback(null, signingKey);
});
}
return new Promise((resolve, reject) => {
jwt.verify(
bearerToken,
getJwksClientKey,
{
audience: config.AUDIENCE,
issuer: `https://${config.AUTH0_DOMAIN}/`,
algorithms: ['RS256'],
},
function (err, decoded) {
console.log(bearerToken);
if (err) reject(err);
resolve(decoded);
}
);
});
};
export default verifyToken;
我最近更新到 Apollo Server 4,问题开始了。但是对于我的生活,我无法弄清楚出了什么问题。