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
的参数。出于安全原因,您可能不想告诉未经身份验证的用户此路由需要此参数。这泄露了很多信息,对吧?
就我个人而言,我认为首先进行身份验证有以下几个原因:
更重要的是告诉用户他们无权访问端点,或者他们的请求无效?我觉得授权比较重要
出于安全原因,请勿透露任何非绝对必要的信息。
建立身份验证方法后,"work" 对请求进行身份验证的数量是相同的,但请求之间的验证可能会有很大差异。一条路线可能有许多需要验证的参数。因此,如果您必须平均计算失败请求的成本,那么身份验证可能比很多很多请求更便宜。 (见 JWT 认证)
根据请求生命周期 (http://hapijs.com/api#request-lifecycle),我对 Hapi 如何处理验证感到有点困惑,参数/查询的验证仅在身份验证完成后发生。
这样做有意义吗?例如,我正在处理 public API,但如果请求参数无效,我不想执行所有身份验证逻辑。
说出具有以下验证的请求:
validate: {
name: Joi.string().required()
}
当请求因 name
未发送而无效时,为什么 API 会经历验证用户的麻烦?
还是我误解了请求生命周期?
当验证失败时,hapi returns 关于为什么 验证失败的信息。在您的示例中,路由需要一个名为 name
的参数。出于安全原因,您可能不想告诉未经身份验证的用户此路由需要此参数。这泄露了很多信息,对吧?
就我个人而言,我认为首先进行身份验证有以下几个原因:
更重要的是告诉用户他们无权访问端点,或者他们的请求无效?我觉得授权比较重要
出于安全原因,请勿透露任何非绝对必要的信息。
建立身份验证方法后,"work" 对请求进行身份验证的数量是相同的,但请求之间的验证可能会有很大差异。一条路线可能有许多需要验证的参数。因此,如果您必须平均计算失败请求的成本,那么身份验证可能比很多很多请求更便宜。 (见 JWT 认证)