Hapi用户凭据对象来自何处?

时间:2016-08-22 15:49:59

标签: node.js hapijs

我正在使用Hapi.js构建一个基于角色的授权的简单站点(即,用户可以看到这些路由,但是Managers可以看到那些路由)。从我所读到的,听起来像Hapi的Scopes将是理想的。

但是,虽然我知道如何指定路由以使其需要特定范围,但文档对于如何指定用户具有的范围仍然含糊不清。我该如何指定?这些物体的寿命是多少?它们是否随每个请求一起发送?是否与JWT中使用的声明相符?

我已阅读Hapi API Docs,并且已阅读this article about using scopes for role based authorisation.

我正在使用hapi-auth-jwt2进行身份验证,如果这表明任何事情。

TLDR;如何指定用户可以访问的范围?

1 个答案:

答案 0 :(得分:0)

我很确定这个答案只适用于hapi-auth-jwt2。那说:

用户凭据对象是每个客户端请求。默认情况下,它们包含JWT中声明中的任何内容(即凭证==已解码)。如果要覆盖该行为,或者在凭证对象中添加任何其他内容,请在validateFunc中执行此操作。 ValidateFunc接受回调,第三个参数是您想要的凭证对象。例如,如果您的用户角色在JWT中处于“userRole”声明中,那么您可以将其添加到credentials.scope中:

// in server.register()
server.auth.strategy("jwt", "jwt", {
    key: publicKey, 
    validateFunc: validate, 
    verifyOptions: {
    algorithms: ["RS256"]
        } 
});

// elsewhere
function validate(decoded, request, callback) {
    decoded.scope = decoded.userRole;
    return callback(null, true, decoded);
};

就是这样。 hapi-auth-jwt2管理其余部分。现在,在server.route()调用中,如果将config对象设置为:

config: {
    auth: {
        strategy: "jwt",
        scope: ["Manager", "Developer"]
    }
}

...然后只有在其userRole声明中具有这些字符串的JWT的请求才能访问该路由。