我正在使用类似于Polymer Blog的应用程序中的Fastify Rest API,并且只使用身份验证部分。因为它是一个有趣的项目,所以我想尝试HMAC身份验证,但是我不知道如何在前端进行设置,这样我就不会在客户端存储用户密码。 我就是这样想如何实现hmac的:
1。客户端从HTML表单获取用户名和密码,并使用用户密码作为秘密来构建HMAC:
const hmac = crypto.createHmac('sha256', user.password)
hmac.update(querypath) //adds the path name as message
hmac.digest('hex')
2。客户端将hmac放在Authorization标头中,并将其与用户名一起以纯文本格式发送到API:
Authorization: username:[digest]
3。服务器自行计算哈希(查找用户,获取密码等)并将其与从客户端/请求中获得的哈希进行比较
if(hmacFromRequest === hmacCalculatedFromServer){
//authenticated
}else{
//not authenticated
//throw new Error or reply to client
}
我的问题基本上是现在我该如何发回给客户?客户端是否需要将密码保存在某个地方以计算hmac?我是否应该将hmac放入localStorage并在每次发出请求时将其获取?