diff --git a/server/web3service/controllers/jwt.js b/server/web3service/controllers/jwt.js index 6783773..f419503 100644 --- a/server/web3service/controllers/jwt.js +++ b/server/web3service/controllers/jwt.js @@ -3,6 +3,42 @@ const base64url = require('base64url'); const jwksClient = require('jwks-rsa'); const jwt = require('jsonwebtoken'); +const jwksKeyHash = {}; + +function asyncVerify(jwksUri, data) { + return new Promise((resolve) => { + const ret = { + err: null, + decoded: null + }; + const client = jwksClient({ + jwksUri: jwksUri + }); + function getKey(header, cb ) { + console.log(header); + client.getSigningKey(header.kid, function(err, key) { + console.log(err); + console.log(key); + const signingKey = key.publicKey || key.rsaPublicKey; + if (!err) { + jwksKeyHash[jwksUri] = { + 'key': key, + 'last_refresh_time': 0 + }; + } + cb(null, signingKey); + }); + }; + jwt.verify(data, getKey, function(err, decoded) { + console.log(err); + console.log(decoded); + ret.err = err; + ret.decoded = decoded; + resolve(ret); + }); + }); +} + async function verify(session) { const postData = session.getBody(); console.log(postData); @@ -11,21 +47,14 @@ async function verify(session) { const header = base64url.decode(arr[0]); const payload = base64url.decode(arr[1]); const sign = base64url.decode(arr[2]); - const client = jwksClient({ - jwksUri: jwksUri - }); - function getKey(header, cb ) { - console.log(header); - client.getSigningKey(header.kid, function(err, key) { - console.log(err); - console.log(key); - const signingKey = key.publicKey || key.rsaPublicKey; - cb(null, signingKey); - }); - }; - jwt.verify(postData['data'], getKey, function(err, decoded) { - console.log(err); - console.log(decoded); + const {err, decoded} = await asyncVerify(jwksUri, postData['data']); + console.log(err, decoded); + if (err != null) { + session.rspErr(500, err); + return; + } + session.rspData({ + 'decoded': decoded }); }