在hapijs中范围和实体之间有什么区别?

时间:2015-02-28 00:42:15

标签: hapijs

我正在查看一些hapi路由的auth配置选项。我理解范围是如何工作的 - 您可以将路由范围设置为'admin',这意味着用户的凭据必须具有匹配的范围......但是entity的目的是什么?

以下是文档:

  • 实体 - 所需的经过身份验证的实体类型。如果设置,必须匹配 身份验证凭据的实体值。可用值:
    • 任何 - 身份验证可以代表用户或应用程序。这是默认值。
    • 用户 - 身份验证必须代表用户。
    • app - 身份验证必须代表应用程序。

当我在路线上将实体设置为'user'时,我收到此错误:

"message": "Application credentials cannot be used on a user endpoint"

这让我相信我的auth插件正在将我的实体设置为某个地方'app'?作为参考,我使用的是hapi-auth-jwt

2 个答案:

答案 0 :(得分:0)

您可以告诉hapi-auth-jwt验证请求在验证程序函数中具有哪个实体:

var validate = function (decodedToken, callback) {
  ...

  credentials = {
    entity: 'user',
    ...
  };

  return callback(error, authorized, credentials)
};

有关凭据对象here的更多信息。

答案 1 :(得分:0)

虽然这是一篇旧文章,但如果这可以帮助其他人,那么答案就是身份验证被视为代表最终用户,如果凭据< / em> object包含属性 user

在您的情况下,如果凭据对象不包含此类用户属性,则会将其视为代表应用程序的身份验证,因此访问控制失败。您的auth.access.entity定义使您的端点成为用户端点,但您的凭据不被视为用户凭据,而是应用程序凭据

如果您的凭据对象包含其他属性中的用户身份(例如 sub email ),您可能希望将其复制到新属性身份验证插件中的用户或用作配置验证功能的一部分。