【问题标题】:Using JWT for Loopback authentication使用 JWT 进行环回身份验证
【发布时间】:2016-04-01 03:53:27
【问题描述】:

我正在尝试了解如何将自定义 JWT 路由融入环回安全模型。我的应用程序有一个涉及 SMS 的身份验证“舞蹈”,它使用excellent description 生成一个有效的 JWT 令牌。我正在使用jsonwebtoken,一切正常。获得令牌后,我的 angular.js 客户端将令牌与 Authorisation: JWT ..token.. 标头中的每个请求一起发送(发现有冲突的文档,一个说 JWT,一个承载,但我可以弄清楚)。

现在我想在环回应用程序中使用令牌。我想使用 ACL 系统环回提供的。我确实阅读了以下资源:

而且我不清楚我的下一步是什么。我有工作:

  • 用户“登录” - 生成 JWT
  • 用户使用用户名/密码登录(即将停用)
  • 在环回中工作的 ACL 实现(当我访问 ACL 受保护的资源时,我得到了预期的 4xx 错误)
  • 我的 JWT 令牌正确 (?) 在请求的标头中

我需要:

  • 基于 JWT 令牌,具有与环回 ACL 兼容的角色的有效用户

非常感谢您的帮助

【问题讨论】:

  • 你有没有想过这个问题?
  • 谢谢提醒我。是的,我做到了。下面回答
  • JWT 令牌的认证方案是“Bearer”。

标签: node.js jwt loopbackjs passport.js


【解决方案1】:

结果证明解决方案比我想象的要简单得多。对于初学者,环回确实使用自己的 jwt webtoken 来保持(无状态)用户会话。建立身份后(在我的情况下,从我的 JWT 令牌中提取手机号码)我只需要查找成员并生成环回本机 JWT 令牌。我的端点定义是这样的:

  Member.remoteMethod(
    'provideSMSToken', {
      accepts: [{
        arg: 'mobilenumber',
        type: 'string',
        description: 'Phone number including +65 and no spaces'
      }, {
        arg: 'token',
        type: 'string',
        description: 'the token received through SMS'
      }],
      returns: {
        arg: 'token',
        type: 'string'
      },
      description: 'provide SMS token to confirm login',
      http: {
        path: '/smsauthenticate',
        verb: 'post'
      },
      isStatic: true
    }

  );

还有 provideSMSToken 这样的函数:

 // Exchange the SMS Token with a login token
  Member.provideSMSToken = function(mobilenumber, token, cb) {
    var app = Member.app;
    // CHeck if the token does exist for the given phone number
    // if yes, check for the respective memeber

    if (!app.smsVerificationToken || !app.smsVerificationToken[mobilenumber] || app.smsVerificationToken[mobilenumber] !== token) {
      var wrongToken = new Error("Wrong or missing token");
      cb(wrongToken, "Wrong or missing token");
    } else {
      var timetolive = 86400;
      Member.lookupByPhone(mobilenumber, function(err, theOne) {
        if (err) {
          cb(err, "Sorry, no such member here!");
        } else {
          // We can provide a token now for authentication
          // using the default createAccessToken method
          theOne.createAccessToken(timetolive, function(err, accesstoken) {
            cb(err, accesstoken);
          })
        }
      });
    }
  }

像魅力一样工作

【讨论】:

  • 我正在使用环回,但它没有使用 JWT,我一直在寻求实现它们。您是否必须配置某些东西,或者它使用开箱即用的 JWT?
  • Loopback 身份验证令牌是 JWT。
  • 环回还是网关?因为我的数据库正在存储令牌并且它们没有正常的 jwt 结构。
  • JWT 是编码(未加密)签名的任意内容。没有所谓的“正常”结构。但是您可能想提出一个新问题并提出所有活动部分。当您提供不完整的信息时,您将无法得到您正在寻找的答案
  • JWT 具有“正常结构”。它由标头、有效负载和签名组成,以点分隔 - 请参阅 jwt.io 。我们的 LoopBack 应用程序中使用的访问令牌没有三个部分,不解码为任何有效负载,也不是无状态的,因为它们存储在数据库中。 (至少是我正在研究的实现)。我在环回文档中也没有看到任何关于 JWT 的内容。您是否有机会发送一些链接来解释如何在环回中使用 JWT?
猜你喜欢
  • 2016-04-07
  • 2023-03-27
  • 2021-05-29
  • 2017-07-30
  • 2018-06-30
  • 2018-08-03
  • 2021-02-06
  • 2022-12-03
  • 2015-06-29
相关资源
最近更新 更多