我正在使用Loopback版本4(Node.js框架)进行项目开发。我需要使用Auth0实施身份验证。但是,似乎Auth0与Loopback的版本4不兼容。我找不到有关此主题的任何文档,甚至没有教程。 那里的人曾经在Loopback 4中实现过Auth0身份验证吗?
答案 0 :(得分:2)
LoopBack团队您好?
身份验证和授权是我们目前(截至2019年6月)正在积极努力的功能。据我从Auth0文档(请参阅Server Client + API: Node.js Implementation for the API)得知,他们正在使用JWT令牌。
幸运的是,我们已经有一个示例应用程序演示了基于JWT的身份验证-请参见https://github.com/strongloop/loopback4-example-shopping
看看JWTService类,它是解析和验证客户端提供的令牌的地方。
Auth0提供的Express示例使用express-jwt包,该包将jsonwebtoken包装到Express中间件中。
在LoopBack中,我们直接调用jsonwebtoken
。
要适应Auth0提供的基于Express的示例,应该足以弄清楚如何将express-jwt配置的相关位传递给jsonwebtoken库。
这是从Auth0文档复制的配置:
// Create middleware for checking the JWT
const checkJwt = jwt({
// Dynamically provide a signing key based on the kid in the header and the singing keys provided by the JWKS endpoint.
secret: jwksRsa.expressJwtSecret({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: `https://YOUR_DOMAIN/.well-known/jwks.json`
}),
// Validate the audience and the issuer.
audience: process.env.AUTH0_AUDIENCE,
issuer: `https://YOUR_DOMAIN/`,
algorithms: ['RS256']
});
这是LoopBack的JWTService
调用jsonwebtoken库的方式:
const decryptedToken = await verifyAsync(token, this.jwtSecret);
请注意,jwtSecret
已注入服务中,我们在此处进行配置:
this.bind(TokenServiceBindings.TOKEN_SECRET).to(
TokenServiceConstants.TOKEN_SECRET_VALUE,
);
我相信您需要用TokenServiceConstants.TOKEN_SECRET_VALUE
返回的值替换jwksRsa
。
this.bind(TokenServiceBindings.TOKEN_SECRET).to(
jwksRsa.expressJwtSecret({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: `https://YOUR_DOMAIN/.well-known/jwks.json`
}),
})
需要解决的剩余问题:
如何应用audience
,issuer
和algorithms
选项。
我不确定jsonwebtoken
是否支持现成的动态机密。如果上述建议不起作用,则您可能需要调查express-jwt
来源,以了解它们如何处理动态机密。
我希望我的答案能提供足够的指针,使您能够自己找出缺失的细节。如果可以解决问题,可以发布完整的工作解决方案,那就太好了。
答案 1 :(得分:2)
LoopBack团队的成员之一最近实现了一个概念验证应用程序,该应用程序显示了如何与Auth0集成。您可以在此处找到存储库: