Java后台接口加密

先声明本人是Java初学者,仅写自己感悟,不专业处,仅供参考。

最近在弄Java后台接口加密,公司之前的后台接口加密方式是,用户在登录接口成功后,生成一个userToken,还有一个userTokenExpire也就是userToken过期时间,把这两个字段更新存入数据库对应user表,然后把userId和userToken这两个字段返给客户端保存,后面在每个需要验证的接口,客户端都传给服务器userId和一个apiToken,期中apiToken的生成规则是,当前时间年月日+接口Url+userToken进行两次MD5加密,客户端在收到请求后根据userId去user数据库去查用户信息,查不到返回uerId错误,查到再判断userTokenExpire是否过期,如果过期,直接返回,并提示客户端身份信息过期,请重新登录,userTokenExpire没有过期情况下从数据库user表里取出userToken,用和客户端同样的方式即当前时间年月日+接口Url+userToken进行两次MD5加密生成apiToken,进行比较,相同则验证通过继续执行接口逻辑,不相同直接返回,提示客户端apiToken错误。

这两天又接触了JWT,Json Web Token认证技术该技术比较成熟,感兴趣的可以自行百度,大致分为头部,荷载(可以存一些不重要的信息),签证这三部分,请求头一般放加密方式,荷载这里面信息可以存放签发时间,过期时间,等,签证是用前面两部分内容再结合secret服务器私钥检验,用来检验整个信息是否合法,是否是该服务器发出的。然后将这三者分别Base64加密用逗号隔开生存token在登陆时传给客户端,后面在需要验证的接口请求头部,客户端再传给服务器验证。

总结第二种方式和第一种方式比较,第二种方式不需要第一种方式那样专门在数据库存一个userTokenExpire用来记录token过期时间,直接在荷载里记录,且第二种方式在每个接口不用去查询数据库user表,减少数据库操作。且第一种apiToken生成的方式看似很安全,但是客户端源代码很容易暴露,一旦暴露作用也不大。

不管咋样,如果在登录接口就不安全,token就暴露了,啥都白搭,但用JWT技术用比“裸奔”强,后面为了进一步安全所有请求都用Https即可。

你可能感兴趣的:(Java后台接口加密)