【问题标题】:Is there any way to integrate Auth0 to Loopback 4?有没有办法将 Auth0 集成到 Loopback 4?
【发布时间】:2019-10-30 12:42:11
【问题描述】:

我正在使用 Loopback 版本 4(一个 Node.js 框架)进行项目。我需要使用 Auth0 实现身份验证。但是,Auth0 似乎与 Loopback 的第 4 版不兼容。我找不到关于这个主题的任何文档,甚至是教程。 有人曾经在 Loopback 4 中使用 Auth0 实现身份验证吗?

【问题讨论】:

    标签: authentication auth0 loopback


    【解决方案1】:

    LoopBack 团队的一位成员最近实施了一个概念验证应用程序,展示了如何与 Auth0 集成。您可以在此处找到存储库:

    https://github.com/raymondfeng/loopback4-example-auth0

    【讨论】:

      【解决方案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 库的方式:

      https://github.com/strongloop/loopback4-example-shopping/blob/5f36ae289f50d67bcdc33637c0323daa1f10e02b/packages/shopping/src/services/jwt-service.ts#L35

      const decryptedToken = await verifyAsync(token, this.jwtSecret);
      

      注意jwtSecret是注入到服务中的,我们在这里配置:

      https://github.com/strongloop/loopback4-example-shopping/blob/2d8978d0d72150caf95573c362402491a92757e7/packages/shopping/src/application.ts#L76-L78

          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`
        }),
      })
      

      剩下的事情要弄清楚:

      • 如何应用audienceissueralgorithms选项。

      • 我不确定jsonwebtoken 是否支持开箱即用的动态机密。如果上述建议不起作用,那么您可能需要查看 express-jwt 来源,了解他们如何处理动态机密。

      我希望我的回答能提供足够的指导,让您自己找出缺失的细节。如果您设法解决,如果您能发布完整的工作解决方案,那就太好了。

      【讨论】:

      • Hello Miroslav 我不清楚的是:我们是否有义务管理登录端点以便能够使用没有 auth0 的 Loopback 解决方案获取 jwt 令牌?
      猜你喜欢
      • 2022-09-28
      • 1970-01-01
      • 2020-07-16
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多