【问题标题】:What is the difference between scope and entity in hapijs?hapijs中的范围和实体有什么区别?
【发布时间】:2017-06-09 16:48:09
【问题描述】:

我正在研究 hapi 路由的一些身份验证配置选项。我了解范围的工作原理 - 您可以将路由的范围设置为 'admin',这意味着用户的凭据必须具有匹配的范围......但是 entity 的目的是什么?

这里是文档:

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

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

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

这让我相信我的身份验证插件将我的实体设置为'app'?作为参考,我使用hapi-auth-jwt

【问题讨论】:

  • 能发下插件代码吗?

标签: hapijs


【解决方案1】:

虽然这是一个旧帖子,但如果这可以帮助其他人,答案是 身份验证被认为是代表最终用户如果 凭据 对象包含一个属性 user

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

如果您的凭据对象在另一个属性(例如 subemail)中包含用户身份,您可能需要将其复制到新属性中用户 在您的身份验证插件中或作为您用来配置它的验证功能的一部分。

【讨论】:

    【解决方案2】:

    你可以告诉hapi-auth-jwt验证请求在你的验证器函数中有什么实体:

    var validate = function (decodedToken, callback) {
      ...
    
      credentials = {
        entity: 'user',
        ...
      };
    
      return callback(error, authorized, credentials)
    };
    

    更多关于凭证对象here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 2013-08-19
      • 2012-12-11
      • 2015-09-22
      • 1970-01-01
      • 2013-12-01
      • 2011-02-02
      相关资源
      最近更新 更多