在hapi.js API中,他们指定身份验证方案也可以将工件作为凭证对象的一部分返回。
验证工件究竟是什么以及它们为何有用?是否有一个很好的例子说明为什么hapi团队将其作为API的一部分?
答案 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
方法。这意味着如果稍后执行payload
或response
,他们可以从request
对象访问相同的共享状态,而无需再次解析请求,因此它基本上只是在这种情况下,从请求中提取的相关auth数据的便利容器。