一、什么是系统鉴权
指验证用户是否拥有访问系统的权利。
鉴权分两方面:
服务端用户鉴权,从业务数据层面对客户端进行鉴权
网络鉴权,从网络层面对客户端进行鉴权
二、有哪些系统鉴权
1、session-cookie
2、token(auth)
3、OAuth(开放授权)
4、sign(签名鉴权)
三、token鉴权流程
1、客户端使用用户名和密码请求登录
2、服务端收到请求,验证登录是否成功
3、验证成功后,服务端会返回一个Token给客户端,反之,返回身份验证失败的信息
4、客户端收到Token后把Token用一种方式存储起来
5、客户端每次发起请求时都会将Token发给服务端
6、服务端收到请求后,验证Token的合法性,合法就返回客户端所需数据,反之,返回验证失败的信息
四、token鉴权特性
1、随机性:每次的token都是不一样的(也可以一样,根据算法确认)
2、不可预测性:没有规律,无法预测
3、时效性: 可以设置token的有效时间
4、可扩展性:只是一个model,扩展起来非常方便
五、sign签名分类
1、可逆签名 对称算法,公钥私钥(公钥加密,私钥解密) AES,DES
2、不可逆签名 不可逆算法,密钥一致 RSA的MD5
六、sign签名鉴权的特性
1、一次性的身份校验方式,常见于不同项目间的api通信
2、一般形式是通过 AppID/AccessKey/AppSecret 及签名算法针对通信数据生成签名
3、AccessKey作为公钥,AppSecret作为私钥,AppSecret不能放在网络上传输
4、接口数据推送时,会随带上AppID、AccessKey、Timestamp 及 Signature
5、在服务端同样留存着一份相同的 AppID/AccessKey/AppSecret 配置
6、服务端接受到请求后通过AppID对应出匹配的AppSecret,结合相同的签名算法计算签名,并与请求附带的签名做校验
7、时间戳可以防止恶意用户截取到签名后进行伪装请求,使签名只在一定时间范围内有效,过期后不能再请求
8、由于每次请求的数据包不同,签名结果不同,防止数据被篡改
七、可逆签名鉴权的流程
1、乙方将数据按固定规则连接成字符串
2、乙方使用公钥对字符串加密和appId一起传递给甲方
3、甲方根据乙方传递的appId获取对应的私钥
4、甲方根据密钥解密乙方传递的加密信息
5、甲方根据固定规则将解密后的字符串反序列化
八、不可逆签名鉴权流程
1、乙方将数据按固定规则连接成字符串
2、乙方使用密钥对字符串加密
3、乙方将加密后的信息作为一个字段并和appId及解密前的信息全部传给甲方
3、甲方根据乙方传递的appId获取对应的密钥
4、甲方先单独摘出加密字段,然后对其他信息使用密钥加密
5、将加密得到的字段和摘出的比较是否相等