Skip to content

Commit 8568831

Browse files
committed
remove jsonwebtoken lib because of old dependencies not working with new node server
1 parent 3da7477 commit 8568831

3 files changed

Lines changed: 1360 additions & 5405 deletions

File tree

middlewares/keycloak-middleware.js

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,35 @@
11
import fs from "fs";
22
import session from "express-session";
3-
import jwt from "jsonwebtoken";
43
import passport from "passport";
54
import { Issuer, Strategy } from "openid-client";
65

76
export let client;
87
export let issuerUrl;
98
export let keycloakIssuer;
109

10+
function base64urlToUtf8(str) {
11+
// base64url -> base64
12+
str = str.replace(/-/g, "+").replace(/_/g, "/");
13+
// padding
14+
const pad = str.length % 4;
15+
if (pad) str += "=".repeat(4 - pad);
16+
return Buffer.from(str, "base64").toString("utf8");
17+
}
18+
19+
export function jwtDecode(token) {
20+
if (typeof token !== "string") return null;
21+
const parts = token.split(".");
22+
if (parts.length < 2) return null;
23+
24+
try {
25+
const header = JSON.parse(base64urlToUtf8(parts[0]));
26+
const payload = JSON.parse(base64urlToUtf8(parts[1]));
27+
return { header, payload };
28+
} catch {
29+
return null;
30+
}
31+
}
32+
1133
export async function initKeycloak(app) {
1234
// Load keycloak.json
1335
const kcConfig = JSON.parse(fs.readFileSync("keycloak.json", "utf8"));
@@ -46,10 +68,11 @@ export async function initKeycloak(app) {
4668
const accessToken = tokenSet.access_token;
4769
const refreshToken = tokenSet.refresh_token;
4870
// Decode the ID token to get the user profile
49-
const userProfile = jwt.decode(idToken);
71+
const id = jwtDecode(idToken);
72+
const userProfile = id?.payload;
5073
// Include the access token in the user profile
5174
userProfile.accessToken = accessToken;
52-
userProfile.accessTokenDecoded = jwt.decode(accessToken);
75+
userProfile.accessTokenDecoded = jwtDecode(accessToken)?.payload;
5376
userProfile.refreshToken = refreshToken;
5477
userProfile.keycloakConfig = kcConfig;
5578
done(null, userProfile, { returnTo: req.session.originalUrl });
@@ -137,7 +160,8 @@ export async function refreshAccessToken(req) {
137160
try {
138161
const tokenSet = await client.refresh(req.user.refreshToken);
139162
req.user.accessToken = tokenSet.access_token;
140-
req.user.accessTokenDecoded = jwt.decode(tokenSet.access_token);
163+
const access = jwtDecode(tokenSet.access_token);
164+
req.user.accessTokenDecoded = access?.payload;
141165
req.user.refreshToken = tokenSet.refresh_token;
142166
req.user.rolesCalculated = JSON.stringify(getLdapGroups(req));
143167
// Get updated user information

0 commit comments

Comments
 (0)