在hapi.js API中,他们指定身份验证方案也可以返回工件作为凭证对象的一部分.
什么是身份验证工件以及它们为何有用?是否有一个很好的例子说明为什么hapi团队将其作为API的一部分?
简短的回答
在request.auth你有机会获得以下特性:
credentials - 识别或代表唯一用户的事物artifacts - 可选的与身份验证无关的身份验证相关数据Hapi身份验证方案不是有状态的,但它们可以存储重要的身份验证数据,request.auth.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'
}
Run Code Online (Sandbox Code Playgroud)
......为什么它们有用?
hapi-auth-hawk中可以找到它们有用的原因的一个例子.请记住,hapi中的auth方案可以有3个不同的函数用于身份验证:
authenticate - 验证初始请求所需的功能payload - 可选择验证有效负载response - 可选择验证响应在hapi-auth-hawk中,从初始请求request.auth.artifacts填充authenticate方法.这意味着如果payload或response稍后执行,他们可以从request对象访问相同的共享状态而无需再次解析请求,因此在这种情况下,它基本上只是从请求中提取的相关auth数据的便利容器.