使用带有 RS256 加密的 express-jwt 在应用程序路由上解码 JWT 令牌会抛出未经授权的错误

Decoding JWT token on app route using express-jwt with RS256 encryption throws UnAuthorized Error

我正在使用 Keycloak 进行身份验证,并使用它的中间件为我的请求附加了一个令牌。我试图编写一个 api 路由来使用该令牌检索用户数据,但是,我收到以下错误:

UnauthorizedError: error:0909006C:PEM routines:get_name:no start line

目前我正在访问“/protected/”路径上的用户数据

app.get('/protected', jwt({
  secret: Buffer.from(process.env.TOKEN_SECRET as string), 
  algorithms: ['RS256'],
  requestProperty: 'auth',
  getToken: (req: any) => {
    const token = req?.kauth?.grant?.access_token;
    if (token) {
      console.log(token.token.toString())
      return token.token.toString();
    } 
    return null;
  }
}), (req: any, res: any) => {
  return res.json(req.auth)
});

我正在从 keycloak 控制台获取我的 public 密钥 - 但我仍然收到该错误。

** 编辑 **

将第一行和最后一行添加到秘密后:

`-----BEGIN PUBLIC KEY-----\r\n${Buffer.from(process.env.TOKEN_SECRET as string)}\r\n-----END PUBLIC KEY-----`

我现在收到一个新错误:

UnauthorizedError: No authorization token was found

Keycloak return 第一行和最后一行基本上是页眉和页脚。所以需要自己添加。

const publicKey = `-----BEGIN PUBLIC KEY-----\r\n${public_key}\r\n-----END PUBLIC KEY-----`

并在 express-jwt 中使用它