Hapijs 在身份验证之前验证参数

Hapijs validate params before authentication

根据请求生命周期 (http://hapijs.com/api#request-lifecycle),我对 Hapi 如何处理验证感到有点困惑,参数/查询的验证仅在身份验证完成后发生。

这样做有意义吗?例如,我正在处理 public API,但如果请求参数无效,我不想执行所有身份验证逻辑。

说出具有以下验证的请求:

validate: { 
    name: Joi.string().required()
}

当请求因 name 未发送而无效时,为什么 API 会经历验证用户的麻烦?

还是我误解了请求生命周期?

当验证失败时,hapi returns 关于为什么 验证失败的信息。在您的示例中,路由需要一个名为 name 的参数。出于安全原因,您可能不想告诉未经身份验证的用户此路由需要此参数。这泄露了很多信息,对吧?

就我个人而言,我认为首先进行身份验证有以下几个原因:

  1. 更重要的是告诉用户他们无权访问端点,或者他们的请求无效?我觉得授权比较重要

  2. 出于安全原因,请勿透露任何非绝对必要的信息。

  3. 建立身份验证方法后,"work" 对请求进行身份验证的数量是相同的,但请求之间的验证可能会有很大差异。一条路线可能有许多需要验证的参数。因此,如果您必须平均计算失败请求的成本,那么身份验证可能比很多很多请求更便宜。 (见 JWT 认证)