鉴权
一.常用加密算法
1.base64:不可读,可逆
2.md5:不可逆,一般128位,鉴别消息的完整性。md5加随机盐,密文和盐都存在数据库,哪怕用户密码都一样,密文也不一样。
3.SHA256:不可逆,比md5长度更长更安全,鉴别消息的完整性
4.HMAC256:加了个密钥和明文,一起加密,不可逆。鉴别消息的完整性
5.AES:对称加密,加解密都用同一个密钥
6.RSA:非对称加密,公钥加密,私钥解密。 加签验签就私钥加密,公钥解密,数字签名,防止数据篡改。
7.国密对称SM1,非对称SM2,SM3数字签名,类似md5
二.JWT
JWT由三部分组成:
头部(Header):type和加密算法
载荷(Payload):存储一些用户的公开信息等
签名(Signature):对前两部分的签名,防止数据篡改
token:EFASFAS(头部).GGGSSS(载荷base64).GGGGSAF(签名,前两部分加上密钥后加密而来的)
String token = JWT.create()
.withAudience(customer.getCustomerId()) //载荷
.withIssuer(System.nanoTime() + "") // jwt签发者 可省略
.sign(Algorithm.HMAC256(customer.getPassword())); // 签名算法和密钥
String customerId = JWT.decode(token).getAudience().get(0); // 获取载荷
// 验证token,验证失败会抛异常
private DecodedJWT verifyAndParse(String token) {
JWTVerifier verifier = JWT.require(Algorithm.HMAC256(customer.getPassword()))
// .withIssuer("auth0")
// .withClaim("username", username)
.build();
return verifier.verify(token);
}
三. oauth2(开放授权协议)
oauth2:是一种开放授权协议,实现安全访问。它允许用户授权给第三方应用有限的访问一些资源权限,而不需要输入账号密码
1.授权码模式:
第三方应用先申请一个授权码,用户同意后,返回授权码,在根据授权码去获取令牌
请求授权码参数一般有:
response_type:表示授权类型,必选项,此处的值固定为"code"
client_id:表示客户端的ID,必选项
redirect_uri:表示重定向URI,可选项
请求令牌参数一般有:
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET& # client_id和client_secret用来让 B 确认 A 的身份,client_secret参数是保密的,因 此只能在后端发请求
grant_type=authorization_code& # 采用的授权方式是授权码
code=AUTHORIZATION_CODE& # 上一步拿到的授权码
redirect_uri=CALLBACK_URL # 令牌颁发后的回调网址
返回:
{
"access_token":"ACCESS_TOKEN", # 令牌
"token_type":"bearer",
"expires_in":2592000,
"refresh_token":"REFRESH_TOKEN",
"scope":"read",
"uid":100101,
}
2.简化(隐式)模式
第三方应用直接申请令牌,没有授权码这个步骤,一般是纯前端的应用,安全要求性不高,且令牌存活时间短,会话期间有效,浏览器关闭就没了。
3.密码模式
用户直接把用户名和密码给应用去申请令牌,用户高度信任某应用,应用不保存用户的信息
4.客户端模式
客户端以自己的名义,向服务提供方请求令牌,获取服务。
浙公网安备 33010602011771号