HMAC 认证方式
HMAC(Hash-based Message Authentic Code),即基于hash的消息认证码,它使用哈希算法,以一个密钥和一个消息作为输入,生成一个消息摘要作为输出,服务端通过对比发送的摘要和自己生成的摘要是否相同完成认证。
HMAC(AK/SK)
HMAC预先生成一个access key(AK)和secure key(SK),然后客户端通过使用AK和SK以及可能存在的偏移量iv对一段消息文本进行签名,客户端发送AK和签名,服务端使用AK和SK以及偏移量iv重新签名,通过对比两个签名是否一致的方式完成认证请求。这种方式避免传输secure key,且大多数情况下只允许使用一次,避免了重放攻击。
类比 云信API. 云信IM链接
申请APPID, 然后每次请求 header 携带 timestap + signature
在API的研发中心有3个概念,认证,授权,凭证。 知乎 说话好巢
-
1:HMAC(AK/SK) 是一种认证方式,相较于传统的传输账户密码,它避免了密码的传输,并且因为有加密,时间等因素存在。避免了数据串改,重放攻击等问题。AK其实就是用户名,用来标识调用API者的身份。SK是秘钥,用来加密,通过对比加密结果,来判断SK是否对的上。
-
2:JWT是凭证的一种,相较于简单的TOKEN,可以理解其是一种复杂的TOKEN,TOKEN本身通过解密可以获取用户信息。比如 用户张三,29岁。我编码后是 ASDASDASDA,这个TOKEN解密后能还原张三,29岁这样的信息。
-
3:OAuth 2.0 是授权
在实际应用中,比如我们去调用腾讯的接口,我们先要通过AK/SK完成认证,也就是告诉腾讯,我们是XXX!如果腾讯在数据库里找到了你的信息,你就认证通过了。这个时候我们可以访问一些公共的资源,或者属于开发者的资源!
但是如果你要访问腾讯其他用户的资料,则需要获取用户的授权。比如老王要授权你去读取它QQ空间的照片。这里通过OAUTH2.0完成授权获取token。 这个TOKEN就是你获取授权的一个凭证,你可以拿来读取老王的照片!
认证解决的是身份辨识的问题,知道谁在调用接口!
授权解决的是权限的问题,知道你能调哪些接口。(对于默认开放的借口,也可以不要授权)
token是凭证,JWT又是生成token的一种具体方法。