Skip to content

Commit fbb549e

Browse files
authored
[OGUI-1189] Improve errors returned from O2JsonWebToken and bump the library's version (#3411)
* Add more information on JWT errors usage from token within O2Token service * Bump version of `jsonwebtoken` library * Add tests
1 parent cc30853 commit fbb549e

6 files changed

Lines changed: 87 additions & 39 deletions

File tree

Framework/Backend/http/server.js

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -516,19 +516,10 @@ class HttpServer {
516516
} catch ({ name, message }) {
517517
this.logger.errorMessage(`${name} : ${message}`);
518518

519-
const response = { error: '403 - Json Web Token Error' };
520-
521-
// Allow for a custom message for known error messages
522-
switch (message) {
523-
case 'jwt must be provided':
524-
response.message = 'You must provide a JWT token';
525-
break;
526-
default:
527-
response.message = 'Invalid JWT token provided';
528-
break;
529-
}
530-
531-
res.status(403).json(response);
519+
res.status(403).json({
520+
error: '403 - Json Web Token Error',
521+
message,
522+
});
532523
return;
533524
}
534525

Framework/Backend/services/O2TokenService.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,21 @@ class O2TokenService {
5656
* @throws {Error} - if token, secret or issuer are invalid
5757
*/
5858
verify(token) {
59-
return jwt.verify(token, this._secret, { issuer: this._issuer });
59+
try {
60+
return jwt.verify(token, this._secret, { issuer: this._issuer });
61+
} catch (error) {
62+
switch (error.name) {
63+
case 'TokenExpiredError':
64+
error.message = `Token expired at ${error.expiredAt}`;
65+
break;
66+
case 'JsonWebTokenError':
67+
error.message = `Invalid token: ${error.message}`;
68+
break;
69+
default:
70+
error.message = `Token verification failed: ${error.message}`;
71+
}
72+
throw new jwt.JsonWebTokenError(error.message);
73+
}
6074
}
6175
}
6276

Framework/Backend/test/mocha-http.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ describe('REST API', () => {
139139
.expect('Content-Type', /json/)
140140
.expect(403, {
141141
error: '403 - Json Web Token Error',
142-
message: 'Invalid JWT token provided',
142+
message: 'Invalid token: jwt malformed',
143143
}, done);
144144
});
145145

@@ -149,7 +149,7 @@ describe('REST API', () => {
149149
.expect('Content-Type', /json/)
150150
.expect(403, {
151151
error: '403 - Json Web Token Error',
152-
message: 'You must provide a JWT token',
152+
message: 'Invalid token: jwt must be provided',
153153
}, done);
154154
});
155155

Framework/Backend/test/mocha-o2web-token.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ describe('JSON Web Token', () => {
8080
const o2Token = new O2TokenService(jwt);
8181
const token = o2Token.generateToken(101, 'alice', 'Alice O2');
8282
o2Token._secret = 'changed';
83-
assert.throws(() => o2Token.verify(token), new JsonWebTokenError('invalid signature'));
83+
assert.throws(() => o2Token.verify(token), new JsonWebTokenError('Invalid token: invalid signature'));
8484
});
8585
});
8686
});

Framework/package-lock.json

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

Framework/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"dependencies": {
3434
"express": "^4.22.1",
3535
"helmet": "^8.1.0",
36-
"jsonwebtoken": "^9.0.0",
36+
"jsonwebtoken": "9.0.3",
3737
"kafkajs": "^2.2.0",
3838
"mithril": "1.1.7",
3939
"mysql": "^2.18.1",

0 commit comments

Comments
 (0)