我正在使用Hapi.js构建一个基于角色的授权的简单站点(即,用户可以看到这些路由,但是Managers可以看到那些路由)。从我所读到的,听起来像Hapi的Scopes将是理想的。
但是,虽然我知道如何指定路由以使其需要特定范围,但文档对于如何指定用户具有的范围仍然含糊不清。我该如何指定?这些物体的寿命是多少?它们是否随每个请求一起发送?是否与JWT中使用的声明相符?
我已阅读Hapi API Docs,并且已阅读this article about using scopes for role based authorisation.
我正在使用hapi-auth-jwt2进行身份验证,如果这表明任何事情。
TLDR;如何指定用户可以访问的范围?
答案 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的请求才能访问该路由。