本文主要讨论一下jwt和HMAC(AK/SK)的使用场景
jwt
一般是由用户先发送用户名、秘密,认证通过后服务器返回jwt,其中包含三段信息:
Header,记录jwt元数据
Payload,记录真实要传递的数据
Signature,记录数据签名
其中Signature是根据jwt签名算法+服务端自定义的秘钥生成的hash信息
关键就是这个服务器自定义秘钥,达到两个效果:完整性验证,如果传输过程中被篡改,签名会对不上(这个由hash算法保证)
验证成功,同时也意味着认证成功
由于自定义秘钥,也限制了jwt一般用于单一服务的登陆和认证,对于多个服务,可能由于各自的秘钥不一致,甚至Payload信息不一样,无法在多个服务之间跨服务认证
适用场景:存在用户登陆,用户通过密码换取jwt,后续使用jwt交互
简单的实体认证,由服务方直接分发一个生成的jwt给另一方,另一方每次带着jwt访问接口,常用于认证其他接口实体,但安全性较弱
HMAC(AK/SK)
HMAC预先生成一个 access key(AK) 和 secure key(SK),然后通过签名的方式完成认证请求,这种方式可以避免传输 secure key,且大多数情况下签名只允许使用一次,避免了重放攻击。
基本过程如下:客户端需要在认证服务器中预先设置 access key(AK 或叫 app ID) 和 secure key(SK)
在调用 API 时,客户端需要对参数和