Hapijs在身份验证前验证参数

Hapijs validate params before authentication

本文关键字:验证 参数 身份验证 Hapijs      更新时间:2023-09-26

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

这样做有意义吗?例如,我正在开发一个公共的API,但如果请求参数无效,我不想通过所有的身份验证逻辑。

说出一个带有以下验证的请求:

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

当请求由于未发送name而无效时,API为什么会遇到验证用户的麻烦?

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

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

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

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

  2. 出于安全考虑,不要透露任何超出绝对必要的信息。

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