如何在JWT中实现权限

问题描述 投票:0回答:1

我看到了很多与此主题相关的帖子,但是我的问题有所不同。 !

我的应用具有会话Jwt

  • Session-用于节点ACL(使用Redis)
  • JWT-用于身份验证

现在iam尝试删除节点acl并使用JWT实现权限

我已将所有可访问的URL添加到我的令牌jwt_payload

{
  "id": "5ddb7cb9c525b923505138df",
  "email": "[email protected]",
  "permissions": [
    "/admin",
    "/users",
    "/staff",
  ],
  "iat": 1574667849,
  "exp": 1574754249,
  "aud": "admin",
  "iss": "stackoverflow.com",
  "sub": "loginToken"
}

用户可以访问/ admin,/ user和/ staff URL,

我的问题是如何检查许可并给出允许或错误?

var opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = 'your_jwt_secret';

passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    Admin.findById(jwt_payload.id, function(err, admin) {
        if (err) {
            return done(err, false);
        }
        if (admin) {

            return done(null, admin);
        } else {
            return done(null, false);
        }
    });
}));
node.js jwt passport.js acl express-jwt
1个回答
0
投票

您需要检查令牌是否有效(符号正确且未过期),然后才能从验证过程中获取有效负载信息。因此,基本上,您可以制作中间件,该中间件将验证令牌,并通过有效负载使请求继续进行或返回带有相应代码的错误响应。

© www.soinside.com 2019 - 2024. All rights reserved.