【问题标题】:Customizing the payload of a JWT token in a MEAN stack application在 MEAN 堆栈应用程序中自定义 JWT 令牌的有效负载
【发布时间】:2018-08-13 04:22:19
【问题描述】:

在我的 Web 应用程序中,用户登录并创建了一个令牌。现在我想向这个令牌的有效负载添加一个声明:是否是管理员的布尔值。

我在网上搜索过,但似乎找不到如何在平均堆栈应用程序中实现这一点。

我的目标是当用户登录时,我可以使用令牌的有效负载检查用户是否是管理员。然后我可以锁定我的应用程序的特定部分,以便只有管理员可以访问它们。

这是服务中的登录功能

function logIn(user) {
        return $http.post('/api/users/login', user, {
            headers: {
                Authorization: 'Bearer ' + getToken()
            }
        }).success(function(data) {
            saveToken(data.token);
        }).error(function(err){
          return err;
        });
    }

这些是保存令牌和从本地存储中获取令牌的函数:

function saveToken(token) {
        $window.localStorage['ptlab-app-token'] = token;
    }
function getToken() {
        return $window.localStorage['ptlab-app-token'];
    }

这是我用来检查用户是否登录以解锁应用程序特定部分的功能:

function isLoggedIn() {
        var token = getToken();

        if (token) {
            var payload = angular.fromJson($window.atob(token.split('.')[1]));
            return payload.exp > Date.now() / 1000;
        } else {
            return false;
        }
    }

所以我想通过管理员检查执行与 isLoggedIn 相同的操作。但我似乎无法弄清楚如何自定义 jwt 令牌的有效负载并向有效负载添加声明。使用名为“admin”的声明,我可以轻松检查用户是否是管理员,而无需访问数据库。

有人有什么建议吗?

【问题讨论】:

  • 请注意:在处理将 JWT 存储在 cookie 与 local/sessionStorage 上时,我通常非常有偏见,因此我觉得有必要确保您从安全角度了解这些差异:auth0.com/docs/security/store-tokens: ) 干杯!

标签: angularjs node.js mongodb express jwt


【解决方案1】:

您可以在创建令牌时调整其有效负载(在 Node.js 中),因此您只需添加一个 isAdmin 布尔值。之后您可以解码令牌并检索isAdmin 的值以查看用户是否为管理员。

令牌创建:

const payload = {
  id: user._id,
  isAdmin: user.isAdmin,
};
const token = jwt.sign(payload, "superSecret", {
  expiresIn: 86400,
});

令牌解码:

const decoded = await jwt.verify(token, "superSecret");
const isAdmin = decoded.isAdmin;

【讨论】:

    【解决方案2】:

    您可以简单地去 JWT.io 解码您的令牌并找到内容,甚至您可以在令牌解码中发送 isAdmin 密钥和值,并在节点中的客户端验证它是 jwt.decode 并且在角度应用程序中相同。

    【讨论】:

      猜你喜欢
      • 2019-10-29
      • 2018-09-15
      • 2015-04-18
      • 2017-03-18
      • 2021-12-24
      • 2016-01-19
      • 2018-12-19
      • 2017-10-24
      • 2017-12-13
      相关资源
      最近更新 更多