【问题标题】:Missing "admin" property in express-jwtexpress-jwt 中缺少“admin”属性
【发布时间】:2017-03-11 21:13:17
【问题描述】:

我有一个带有 express-jwt 的 nodejs express 服务和一个受保护的 api 调用。

app.get('/protected',
  jwtCheck, function(req, res) {
    console.log(JSON.stringify(req.user));
    if (!req.user.admin)
      return res.send("user");
    res.send("admin");
});

问题是,req.user 对象不包含“admin”字段。 我已经在 Auth0 规则中添加了角色,所以我可以让它在我的客户端中工作,而不是在 nodejs 服务器中。

我从这里学习了教程:https://github.com/auth0/express-jwt

我在这里错过了什么吗?我需要在 auth0 中设置规则以便添加管理字段吗?

编辑:在 git 问题中找到此描述: “您的令牌需要包含信息(例如:角色)。为了使用 Auth0 执行此操作,您必须请求适当的范围,例如:scope=openid 电子邮件角色。” 现在,如何编辑 express-jwt 的范围?

提前致谢!

【问题讨论】:

  • 为了更好地理解问题,您能否包含一个用于调用该 API 的示例访问令牌?可以是过期的令牌,也可以是remove the signature part;此外,如果负载上有敏感信息,您可以屏蔽这些值(使用jwt.io)。

标签: javascript node.js jwt auth0 express-jwt


【解决方案1】:

您的 req.user 是否包含任何数据?

在描述中说:

“验证 JsonWebTokens 并设置 req.user 的中间件。”

这意味着当您使用授权标头中的有效 jwt-token 向服务器发出请求时,“express-jwt”库将解码该令牌并将其有效负载存储到“req.user”以供以下中间件使用利用。 即:这个令牌:

"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50aWQiOiIxIiwiaWQiOiIyMzQ0IiwidXNlcm5hbWUiOiInTWFjRyciLCJpYXQiOjE0NzgyNTI1MzIsImV4cCI6MTQ3ODI1NDUzMn0.T_vPE8_Y2JQF9Xq9L2jOdcDoZC7rdDJioFb0DaDe9Zk"

解码为:

{
  "accountid": "1",
  "id": "2344",
  "username": "'MacG'",
  "iat": 1478252532,
  "exp": 1478254532
}

会导致

req.user = {
  "accountid": "1",
  "id": "2344",
  "username": "'MacG'",
  "iat": 1478252532,
  "exp": 1478254532
}

所以,如果您的令牌数据中没有 admin 参数,则 req.user.admin 将是未定义的。 也就是说,您所指的代码 sn-p 中的“admin”只是一种误导性示例,说明如果您的令牌数据包含参数“admin”,您如何保护路由 em>

如果您的 req.user 根本不包含任何数据,则您可能以错误的顺序连接了 middelware 函数。为此,您将不得不发布更多代码进行调试。

【讨论】:

    猜你喜欢
    • 2017-05-07
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多