共计 1950 个字符,预计需要花费 5 分钟才能阅读完成。
一、HttpBasic 模式的应用场景
HttpBasic 登录验证模式是 Spring Security 实现登录验证最简单的一种方式,也可以说是最简陋的一种方式。它的目的并不是保障登录验证的绝对安全,而是提供一种“防君子不防小人”的登录验证。
就好像是我小时候写日记,都买一个带小锁头的日记本,实际上这个小锁头有什么用呢?如果真正想看的人用一根钉子都能撬开。它的作用就是:某天你的父母想偷看你的日记,拿出来一看还带把锁,那就算了吧,怪麻烦的。
举一个我使用 HttpBasic 模式的进行登录验证的例子:我曾经在一个公司担任部门经理期间,开发了一套用于统计效率、分享知识、生成代码、导出报表的 Http 接口。纯粹是为了工作中提高效率,同时我又有一点点小私心,毕竟各部之间是有竞争的,所以我给这套接口加上了 HttpBasic 验证。公司里随便一个技术人员,最多只要给上一两个小时,就可以把这个验证破解了。说白了,这个工具的数据不那么重要,加一道锁的目的就是不让它成为公开数据。如果有心人破解了,真想看看这里面的数据,其实也无妨。这就是 HttpBasic 模式的典型应用场景。
二、spring boot2.0 整合 Spring security
spring boot 2,x 版本 maven 方式引入 Spring security 坐标。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
三、HttpBasic 登录认证模式
如果使用的 Spring Boot 版本为 1.X 版本, 依赖的 Security 4.X 版本,那么就无需任何配置,启动项目访问则会弹出默认的 httpbasic 认证.
我们现在使用的是 spring boot2.0 版本(依赖 Security 5.X 版本),HttpBasic 不再是默认的验证模式,在 spring security 5.x 默认的验证模式已经是表单模式。所以我们要使用 Basic 模式,需要自己调整一下。并且 security.basic.enabled
已经过时了,所以我们需要自己去编码实现。
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {http.httpBasic()// 开启 httpbasic 认证
.and()
.authorizeRequests()
.anyRequest()
.authenticated();// 所有请求都需要登录认证才能访问}
}
启动项目,在项目后台有这样的一串日志打印,冒号后面的就是默认密码。
Using generated security password: 0cc59a43-c2e7-4c21-a38c-0df8d1a6d624
我们可以通过浏览器进行登录验证,默认的用户名是 user.(下面的登录框不是我们开发的,是 HttpBasic 模式自带的)
当然我们也可以通过 application.yml 指定配置用户名密码
spring:
security:
user:
name: admin
password: admin
四、HttpBasic 模式的原理说明
- 首先,HttpBasic 模式要求传输的用户名密码使用 Base64 模式进行加密。如果用户名是
"admin"
,密码是“admin”,则将字符串"admin:admin"
使用 Base64 编码算法加密。加密结果可能是:YWtaW46YWRtaW4=。 - 然后,在 Http 请求中使用 Authorization 作为一个 Header,“Basic YWtaW46YWRtaW4=“作为 Header 的值,发送给服务端。(注意这里使用 Basic+ 空格 + 加密串)
- 服务器在收到这样的请求时,到达 BasicAuthenticationFilter 过滤器,将提取“Authorization”的 Header 值,并使用用于验证用户身份的相同算法 Base64 进行解码。
- 解码结果与登录验证的用户名密码匹配,匹配成功则可以继续过滤器后续的访问。
所以,HttpBasic 模式真的是非常简单又简陋的验证模式,Base64 的加密算法是可逆的,你知道上面的原理,分分钟就破解掉。我们完全可以使用 PostMan 工具,发送 Http 请求进行登录验证。
期待您的关注
- 博主最近新写了一本书:《手摸手教您学习 SpringBoot 系列 -16 章 97 节》
- 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。