Closed
Description
What version of Bun is running?
1.1.4+fbe2fe0c3
What platform is your computer?
Linux 5.15.146.1-microsoft-standard-WSL2 x86_64 x86_64
What steps can reproduce the bug?
Create an express middleware and apply it to any route served via express using https module.
Middleware:
import { Request, Response, NextFunction } from 'express'
import jwt from 'express-jwt'
import jwksRsa from 'jwks-rsa'
function requireAuth(req: Request, res: Response, next: NextFunction) {
const jwksUri = 'https://login.microsoftonline.com/<TENANT_ID>/discovery/v2.0/keys'
const issuer = 'https://login.microsoftonline.com/<TENANT_ID>/v2.0'
const audience = '<CLIENT_ID>'
const client = jwksRsa({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: jwksUri,
})
client
.getSigningKeys()
.then(keys => console.log('keys:', keys))
.catch(err => console.log('error:', err))
const expressJwtSecret = jwksRsa.expressJwtSecret({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: jwksUri,
}) as jwksRsa.GetVerificationKey
const expressJwt = jwt.expressjwt({
secret: expressJwtSecret,
audience: audience,
issuer: issuer,
algorithms: ['RS256'],
})
expressJwt(req, res, (error: unknown) => {
if (error) {
return next(error)
}
return next()
})
}
export default requireAuth
What is the expected behavior?
A collection of signing keys should be returned from the jwksUri using the jwks-rsa package.
What do you see instead?
No keys are returned and fails with error:
JwksError {
name: "JwksError",
message: "The JWKS endpoint did not contain any signing keys",
toString: [Function: toString],
}
Additional information
The same flow works just fine running it with node
Middleware:
const jwt = require("express-jwt");
const jwksRsa = require("jwks-rsa");
function requireAuth(req, res, next) {
const jwksUri = "https://login.microsoftonline.com/<TENANT_ID>/discovery/v2.0/keys";
const issuer = "https://login.microsoftonline.com/<TENANT_ID>/v2.0";
const audience = "<CLIENT_ID>";
const client = jwksRsa({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: jwksUri,
});
client
.getSigningKeys()
.then((keys) => console.log("keys:", keys))
.catch((err) => console.log("error:", err));
const expressJwtSecret = jwksRsa.expressJwtSecret({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: jwksUri,
});
const expressJwt = jwt.expressjwt({
secret: expressJwtSecret,
audience: audience,
issuer: issuer,
algorithms: ["RS256"],
});
expressJwt(req, res, (error) => {
if (error) {
return next(error);
}
return next();
});
}
module.exports = requireAuth;