加密
1、加密方式
将accessKey、secretKey放在Header里明文传递安全吗
答案是否定的,因为我们的请求可能被人拦截,而我们把密码放进请求头里面,可能会被别人获取
一般是根据密钥,生成签名sign
加密方式
-
对称加密
-
非对称加密
-
md5 签名(不可解密)
签名的做法
假如 ,我们有用户参数,我们用密钥与他拼接,用签名算法得到一个不可解密的值
用户参数 + 密钥 => 签名生成算法(MD5,HMac,Sha1) => 不可解密的值
例子: xuan + abc => 7e7b9583aa0bc3e834fe8bcaebda38b5(这里是我随便输的,得到的值是随机的)
怎么知道签名对不对?
服务端用一模一样的参数和算法去生成签名,只要和用户传的一致,就表示密钥一致
怎么防重放?
加nonce随机数 只能用一次
服务端要保存用过的随机数
加timestamp 时间戳,校验它的有效期
综上所属
传递的参数
- accessKey
- sign (由accessKey(或者使用用户请求参数body等)、secretKey加密而来)
- nonce随机数
- timestamp
- body(用户请求参数 可要可不要)
API签名认证是一个很灵活的设计,具体要有哪些参数,尽量服务端调用,参数名如何要根据场景来。
评论