1、场景介绍
注册登录一直都是工程师做系统的必经之路,毕竟这个功能相对与业务较复杂的代码来说是比较简单的。当然,最简单的事情往往最容易出错,最为普通的注册登录就是将用户名及密码存入数据库,在用户登录时,将两者进行比对来校验是否登录成功。但是,这种操作在实际项目中往往不太实用,因为我们需要考虑到安全问题。举个简单的例子,使用上述方法,如果某天数据库数据泄露,用户名及密码被别有用心的人获取,那他们就可用使用获取的到信息随意登录,造成的危害可想而知。所以我们往往是需要将用户密码进行加密,最常见的MD5、SM3、SHA-256等这类散列函数的加密及加盐加密,这类为散列函数加密方式,还有对称和非对称加密方式,以及不将用户名和密码存储到数据库的加密方式:Ad域认证(类似证书的目录层级:国、省、市、公司、部门、人)。
此篇文档则会介绍非对称加密及Ad域认证两种登录方式。
2、使用的技术介绍
技术的详细介绍本文不做过多理论上的介绍,感兴趣的同学可用自行查看,以下只说与本文相关的部分概念,加粗部分为核心!
非对称加密: 非对称加密是由一组非对称密钥对,通过公钥加密,私钥解密或私钥加密,公钥解密的方式进行的一种双向加密方式,所谓双向加密即为可将明文加密为密文,也可以将密文解密为明文。如果使用Hash函数(散列函数)的方式,则无法将密文解密为明文,称为单向加密。
Ad域及Ldap: Active Directory(AD)域认证和LDAP(Lightweight Directory Access Protocol)是密切相关的概念,AD 是一种目录服务,而LDAP 是一种协议。AD 使用 LDAP 作为其访问和查询目录数据的协议。这意味着可以使用LDAP协议来与AD通信,以执行身份验证、检索用户信息、更新用户属性等操作。总之,AD是一种目录服务,而LDAP是一种协议,用于与目录服务进行通信。在Windows环境中,AD通常是目录服务的实现,而LDAP是用于访问和操作AD数据的主要协议之一。
3、开始操作(上代码!!)
准备环境:
1、准备一个Springboot项目,简单写一个注册登录的接口:
目录层级:
controller层:
service层:
2、postman测试接口:
添加用户:
用户登录:
非对称加密方式:
注:非对称加密方式是修改了校验密码是否正确的方式
1、获取一组密钥对,拆解出公钥和私钥,获得的这对密钥要保存好,后续要用
2、改造登录鉴权时的代码(RsaUtil是我自己封装的一个rsa加解密的工具类)
Ldap方式(Springboot集成):
1、准备一个Ldap服务端,关于Ldap的服务器如何部署,同学们自行搜索下
2、在ldap中创建用于测试的用户
3、导入依赖
<!--ldap依赖,版本建议和boot版本一致-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-ldap</artifactId>
<version>2.7.13</version>
</dependency>
4、使用官方提供的客户端LdapTemplate编写鉴权代码
优化代码结构:
1、封装统一的鉴权入口
2、定义接口
3、定义父类
4、子类继承父类,实现两个方法即可
调用者可根据配置指定使用某一个鉴权方式或将所有鉴权都进行一遍
4、注意事项
非对称算法有很多种,我只是拿出一种做示例;以及后续的代码结构优化,是后期加上的,使用的是类似适配器模式+策略模式的结构,这样可扩展性会高很多;代码已push至Git仓库:https://gitee.com/xiaokuncom/devin-blog/tree/develop/secureLogin
5、鸡汤送上
进退两难的年纪皆是生活,让你变好的过程从来都不会很舒服!
最后说明
创作不易,若转载请标明出处或原文链接!!!
感觉写的还行的,帮忙点赞评论哦!!!
有问题的地方,希望帮忙指出!!!