This commit is contained in:
aozhiwei 2024-06-03 11:35:43 +08:00
parent ccaa2e8bee
commit b29f7ab025

View File

@ -4,28 +4,37 @@ const base64url = require('base64url');
const jwksClient = require('jwks-rsa');
const jwt = require('jsonwebtoken');
const LOCK_KEY = 'getJwtLock:';
const jwksKeyHash = {};
const jwksKeyLockHash = {};
async function asyncGetKey(jkwsUri, header, cb) {
if (jwksUri in jwksKeyHash) {
const c = jwksKeyHash[jwksUri];
cb(null, c['key']);
return;
}
const client = jwksClient({
jwksUri: jwksUri
});
client.getSigningKey(header.kid, function(err, key) {
const signingKey = key.publicKey || key.rsaPublicKey;
if (!err) {
jwksKeyHash[jwksUri] = {
'key': key,
'lastRefreshTime': utils.getUtcTime()
};
app.lock(LOCK_KEY + jkwsUri);
try {
if (jwksUri in jwksKeyHash) {
const c = jwksKeyHash[jwksUri];
cb(null, c['key']);
return;
}
cb(null, signingKey);
});
const client = jwksClient({
jwksUri: jwksUri
});
client.getSigningKey(header.kid, function(err, key) {
try {
const signingKey = key.publicKey || key.rsaPublicKey;
if (!err) {
jwksKeyHash[jwksUri] = {
'key': key,
'lastRefreshTime': utils.getUtcTime()
};
}
cb(null, signingKey);
} finally {
app.unLock(LOCK_KEY + jkwsUri);
}
});
} finally {
app.unLock(LOCK_KEY + jkwsUri);
}
}
function asyncVerify(jwksUri, data) {