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

Kev*_* Wu 3 hapijs

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

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

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

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

Mat*_*son 9

简短的回答

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

在此输入图像描述