Skip to content

Commit 1cc9b32

Browse files
kecsocursoragent
andcommitted
WIP bump Azure auth dependencies and migrate token verification to jose
Upgrade @azure/msal-node to 5.1.5 and replace azure-ad-verify-token-commonjs with a shared jose-based verifier so Azure token validation no longer depends on the vulnerable jsonwebtoken 8.x chain. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 28a8168 commit 1cc9b32

5 files changed

Lines changed: 66 additions & 98 deletions

File tree

package-lock.json

Lines changed: 20 additions & 94 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,13 @@
4444
},
4545
"homepage": "https://github.com/webgme/webgme-engine#README.md",
4646
"dependencies": {
47-
"@azure/msal-node": "^2.9.2",
47+
"@azure/msal-node": "^5.1.5",
4848
"@redocly/cli": "^2.30.3",
4949
"@socket.io/redis-adapter": "^8.3.0",
5050
"adm-zip": "^0.5.10",
5151
"agentkeepalive": "^4.5.0",
5252
"archiver": "^7",
5353
"aws-sdk": "^2.1443.0",
54-
"azure-ad-verify-token-commonjs": "^2.0.2",
5554
"bcryptjs": "^3",
5655
"body-parser": "^2",
5756
"browserify": "^17.0.0",
@@ -66,6 +65,7 @@
6665
"ejs": "^5",
6766
"express": "^4.18.2",
6867
"import-fresh": "^3.3.0",
68+
"jose": "^6.2.3",
6969
"jsdoc": "^4.0.2",
7070
"jsonwebtoken": "^9.0.2",
7171
"method-override": "^3.0.0",

src/server/middleware/auth/WebgmeAADClient.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const msal = require('@azure/msal-node');
55
const jwt = require('jsonwebtoken');
66
const GUID = requireJS('common/util/guid');
77
const Q = require('q');
8-
const aadVerify = require('azure-ad-verify-token-commonjs').verify;
8+
const aadVerify = require('./verifyAADToken').verify;
99

1010
class WebGMEAADClient {
1111
constructor(gmeConfig, gmeAuth, logger) {
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*eslint-env node*/
2+
'use strict';
3+
4+
const {URL} = require('url');
5+
6+
let joseModulePromise = null;
7+
const jwksByUri = new Map();
8+
9+
function getJoseModule() {
10+
if (!joseModulePromise) {
11+
joseModulePromise = import('jose');
12+
}
13+
14+
return joseModulePromise;
15+
}
16+
17+
async function getJwks(jwksUri) {
18+
const key = String(jwksUri);
19+
20+
if (!jwksByUri.has(key)) {
21+
const jose = await getJoseModule();
22+
jwksByUri.set(key, jose.createRemoteJWKSet(new URL(key)));
23+
}
24+
25+
return jwksByUri.get(key);
26+
}
27+
28+
async function verify(token, options) {
29+
const jose = await getJoseModule();
30+
const jwks = await getJwks(options.jwksUri);
31+
const result = await jose.jwtVerify(token, jwks, {
32+
issuer: options.issuer,
33+
audience: options.audience,
34+
algorithms: ['RS256'],
35+
});
36+
37+
return result.payload;
38+
}
39+
40+
module.exports = {
41+
verify,
42+
};

src/server/standalone.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const getClientConfig = require('../../config/getclientconfig');
3939
const GmeAuth = require('./middleware/auth/gmeauth');
4040
const Logger = require('./logger');
4141
const AADClient = require('./middleware/auth/WebgmeAADClient');
42+
const aadVerify = require('./middleware/auth/verifyAADToken');
4243

4344
const AddOnEventPropagator = require('../addon/addoneventpropagator');
4445
const webgmeUtils = require('../utils');
@@ -690,7 +691,6 @@ class StandAloneServer {
690691
//device access to use webgme related services - only available when access Scope is used
691692
if (__gmeConfig.authentication.azureActiveDirectory.accessScope) {
692693

693-
const aadVerify = require('azure-ad-verify-token-commonjs');
694694
const verify = aadVerify.verify;
695695
const voptions = {
696696
jwksUri: __gmeConfig.authentication.azureActiveDirectory.jwksUri,

0 commit comments

Comments
 (0)