什么是hapi.js身份验证方案中使用的身份验证工件?

时间:2015-03-20 23:01:45

标签: hapijs

在hapi.js API中,他们指定身份验证方案也可以将工件作为凭证对象的一部分返回。

验证工件究竟是什么以及它们为何有用?是否有一个很好的例子说明为什么hapi团队将其作为API的一部分?

  • result - 包含以下内容的对象:
    • 凭据 - 经过身份验证的凭据。
    • 工件 - 可选的身份验证工件。

http://hapijs.com/api#serverauthschemename-scheme

1 个答案:

答案 0 :(得分:8)

简短回答

request.auth上,您可以访问以下属性:

  • credentials - 标识或代表唯一身份用户的内容
  • artifacts - 与证书无关的可选身份验证相关数据

Hapi身份验证方案不具有状态,但它们可以将重要的身份验证数据存储在request.auth.artifacts中,以便以后可以通过该方案中的其他身份验证功能访问。

验证工件究竟是什么?

首先让我们看一下artifact的一般定义(来自维基百科):

  

[artifacts]指的是由该过程产生的东西   在手而不是问题本身,即感兴趣的结果   源于手段而不是结束。

认证方案可以选择在完成初始认证请求后,将有关认证尝试的一些内部信息(副产品)传递回消费应用程序。

显然artifacts内的数据与每个方案不同。使用Hawk(使用hapi-auth-hawk)时,工件将是一个包含Hawk特定信息的对象,例如请求中的时间戳,随机数和MAC代码:

{ 
    method: 'GET',
    host: '127.0.0.1',
    port: '8000',
    resource: '/resource/1?b=1&a=2',
    ts: '1426940961',
    nonce: 'IRd0nH',
    hash: undefined,
    ext: 'and welcome!',
    app: undefined,
    dlg: undefined,
    mac: 'tKolc1UJ5w8zGcDT6+knQFDHAdJtf0/rDLOZHTzUCoU=',
    id: 'dh37fgj292je' 
} 

...为什么它们有用?

hapi-auth-hawk中可以找到他们有用的原因的示例。请记住,auth scheme in hapi可以有3个不同的功能,用于身份验证:

  • authenticate - 验证初始请求所需的功能
  • payload - 可选择验证有效负载
  • response - 可选择验证回复

在hapi-auth-hawk中,request.auth.artifacts从初始请求填充authenticate方法。这意味着如果稍后执行payloadresponse,他们可以从request对象访问相同的共享状态,而无需再次解析请求,因此它基本上只是在这种情况下,从请求中提取的相关auth数据的便利容器。

enter image description here