【问题标题】:Hapi jwt extra auth check on owner idHapi jwt 对所有者 ID 的额外身份验证检查
【发布时间】:2015-12-15 07:46:20
【问题描述】:

我正在做一个项目 使用 hapi-auth-jwt。 所以当用户登录时 获取此令牌

exports.getUserToken = function getUserToken(user) {
    var userData = {
        username: user.username,
        scope: ['user'],
        iss: apiConfig.iis,
        jti: user.id
    };
    var token = {
        token : Jwt.sign(userData, apiConfig.secret, { expiresInMinutes: apiConfig.expiresInMinutes})
    };
    return token;
};

在路上

{
            method: 'GET',
        path:  internals.resourcePath + '/{userId}',
        config : {
               handler : User.findById,
               validate: Validator.findById,
               auth: {
                    strategy: 'token',
                    scope: ['user']
                }
        }
        },

但我必须进行其他检查,例如 (在控制器中获取一个,更新和删除) 看看用户是否真的是所有者

var jti = request.auth.credentials.jti;
var id = +request.params.userId;
if( id !== jti ){
    return reply( ReplyUtil.forbidden() );
}
var params =request.payload;
User.findOne

我想知道是否有办法不拥有 我的代码重复了(快递中的中间件)

是否值得使用 pre-hook 之类的

server.ext('onPostAuth' , function(request, reply) {
   if(request.auth && request.auth.credentials &&    request.auth.credentials.jti){
        var jti = request.auth.credentials.jti;
        var id = +request.params.userId;
        if( id !== jti ){
            return reply(Boom.forbidden());
        }
    }
    return reply.continue();
});

【问题讨论】:

  • 您可以使用共享路由先决条件hapijs.com/api#route-prerequisites 来检查所有权
  • @MattHarrison 感谢这一点,现在我有两个想法,使用 onPostAuth 或 pre 标志。 imo 在这种情况下 onPostAuth 似乎更清晰,但是...
  • 就个人而言,我会去。这不是全局逻辑,当您在一年内查看代码并尝试了解发生了什么时,它会更好地记录在您的路线配置中。
  • 另一个原因是参数尚未在您的 onPostAuth 中验证,而它们将在 pre:hapijs.com/api#request-lifecycle

标签: hapijs


【解决方案1】:

首先,在您的 validateFunc 中,添加用户的范围他/她的 id:

user.scope.push(user._id);

在 validateFunc 中调用回调函数时,不要忘记将用户对象作为凭据传递。然后在您的路线中,定义类似这样的范围:

auth: {
  strategy: 'token',
  scope: ['admin', 'USER_ID']
}

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2023-04-06
    • 2020-07-30
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2018-08-07
    相关资源
    最近更新 更多