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

What are authentication artifacts used for in hapi.js authentication schemes?

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

身份验证工件到底是什么?它们为什么有用?有没有一个很好的例子来说明为什么 hapi 团队将此作为他们的一部分 API?

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

简答

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

  • credentials - 识别或代表唯一用户的事物
  • artifacts - 非凭据的可选身份验证相关数据

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

身份验证工件到底是什么?

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

[artifacts] refer to something that arises from the process in hand rather than the issue itself, i.e., a result of interest that stems from the means rather than the end.

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

显然artifacts里面的数据每个scheme都不一样。使用 Hawk (with 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. Remember an auth scheme in hapi 中找到它们有用的示例 可以调用 3 个不同的函数来进行身份验证:

  • authenticate - 验证初始请求所需的函数
  • payload - 可选地验证有效载荷
  • response - 可选地验证响应

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