【发布时间】:2017-02-14 23:21:00
【问题描述】:
我对身份验证过程的理解。主机创建secret 和public api key。客户端在秘密的帮助下加密有效载荷,这就是签名。然后将其公钥、有效负载、签名发送给主机。
主机检查是否允许公钥进行操作并根据客户端公钥获取秘密。在秘密的帮助下,主机解密签名并将其与有效负载进行比较。
问题
- 上述过程描述正确吗?
- 如何解密签名并将其与有效负载进行比较?
- 或者我应该以与客户端相同的方式对其进行加密然后进行比较?
-
update&digestNode Docs这两个步骤到底是干什么的
客户:
authenticate: (self)->
payload = 'AUTH' + moment()
signature = crypto.createHmac('sha384', WEBSOCKET_SECRET)
.update(payload)
.digest('hex')
data = {
event: 'auth',
apiKey: WEBSOCKET_KEY,
authSig: signature,
authPayload: payload
}
self.send self, data
服务器:
hmac = crypto.createHmac('sha384', WEBSOCKET_SECRET)
hmac.on 'readable', () ->
data = hmac.read()
if (data)
console.log data, data.toString('utf-8')
# hmac.write(authPayload)
hmac.write(signature)
hmac.end()
当前的服务器端解决方案
authenticate: (authPublicKey, authSignature, authPayload)->
signature = crypto.createHmac('sha384', WEBSOCKET_SECRET)
.update(authPayload)
.digest('hex')
return authSignature == signature
【问题讨论】: