使用带有 RS256 加密的 express-jwt 在应用程序路由上解码 JWT 令牌会引发未经授权的错误
Posted
技术标签:
【中文标题】使用带有 RS256 加密的 express-jwt 在应用程序路由上解码 JWT 令牌会引发未经授权的错误【英文标题】:Decoding JWT token on app route using express-jwt with RS256 encryption throws UnAuthorized Error 【发布时间】:2021-09-18 05:49:33 【问题描述】:我正在使用 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 控制台获取我的公钥 - 但我仍然收到该错误。
** 编辑 **
将第一行和最后一行添加到密钥后:
`-----BEGIN PUBLIC KEY-----\r\n$Buffer.from(process.env.TOKEN_SECRET as string)\r\n-----END PUBLIC KEY-----`
我现在收到一个新错误:
UnauthorizedError: No authorization token was found
【问题讨论】:
【参考方案1】:Keycloak 基本上不返回第一行和最后一行的页眉和页脚。所以需要自己添加。
const publicKey = `-----BEGIN PUBLIC KEY-----\r\n$public_key\r\n-----END PUBLIC KEY-----`
并在 express-jwt 中使用它
【讨论】:
我已经添加了这个,但现在我收到了一个新错误:UnauthorizedError: No authorization token was found
什么可能导致这个问题?
我的意思是那是你的业务逻辑问题什么的,我相信这个问题的范围已经解决了。因为您不知道现在需要添加页眉和页脚。对于当前问题,使用jwt.io
中的公钥检查您是否可以验证 jwt。以上是关于使用带有 RS256 加密的 express-jwt 在应用程序路由上解码 JWT 令牌会引发未经授权的错误的主要内容,如果未能解决你的问题,请参考以下文章
VBA:如何根据 VBA 中的私钥生成带有 RS256 的签名?
Auth0 - 在 Owin 上使用带有承载访问令牌的 JWT 使用 RS256 进行身份验证
使用 RS256 生成的 JWT 可以被 jwt.io 网站解码吗?