【发布时间】:2015-03-23 14:43:24
【问题描述】:
在 hapi.js API 中,他们指定身份验证方案也可以将工件作为凭证对象的一部分返回。
什么是身份验证工件,它们为什么有用?有没有一个很好的例子说明为什么 hapi 团队将此作为其 API 的一部分?
- 结果 - 一个对象包含:
- credentials - 经过身份验证的凭据。
- 工件 - 可选的身份验证工件。
【问题讨论】:
标签: hapijs
在 hapi.js API 中,他们指定身份验证方案也可以将工件作为凭证对象的一部分返回。
什么是身份验证工件,它们为什么有用?有没有一个很好的例子说明为什么 hapi 团队将此作为其 API 的一部分?
【问题讨论】:
标签: hapijs
简答
在request.auth 上,您可以访问以下属性:
credentials - 识别或代表唯一用户的事物artifacts - 非凭据的可选身份验证相关数据Hapi 身份验证方案不是有状态的,但它们可以将重要的身份验证数据存储在 request.auth.artifacts 中,以便以后该方案中的其他身份验证函数可以访问它。
究竟什么是身份验证工件?
首先让我们看一下artifact 的一般定义(来自维基百科):
[artifacts] 指的是过程中产生的东西 手头而不是问题本身,即感兴趣的结果 源于手段而非目的。
一旦完成对请求的初始身份验证,身份验证方案可以选择将有关身份验证尝试的一些内部信息(副产品)传回消费应用程序。
很明显artifacts里面的数据对于每个scheme都不一样。当使用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 对象的相同共享状态,而无需再次解析请求,因此它基本上只是一个方便的容器,用于从中提取相关的身份验证数据本例中的请求。
【讨论】: