鉴权

一.常用加密算法

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.客户端模式

客户端以自己的名义,向服务提供方请求令牌,获取服务。

posted @ 2024-08-28 14:57  好友33  阅读(68)  评论(0)    收藏  举报