HttpBasic 认证模式活该被放弃

开发 前端
为什么是最简陋的?这种模式用来糊弄普通用户可以,但是稍微懂点技术的用户分分钟就可以将其破解,因为底层并未做任何的安全的设置,仅仅是将用户名:密码做了简单的base64加密传递给服务端,base64又是一种可逆的算法。

今天来聊一聊spring security中的一种经典认证模式HttpBasic,在5.x版本之前作为Spring Security默认认证模式,但是在5.x版本中被放弃了,默认的是form login认证模式

HttpBasic模式的应用场景

HttpBasic登录验证模式是Spring Security实现登录验证最简单的一种方式,也可以说是最简陋的一种方式。

为什么是最简陋的?这种模式用来糊弄普通用户可以,但是稍微懂点技术的用户分分钟就可以将其破解,因为底层并未做任何的安全的设置,仅仅是将用户名:密码做了简单的base64加密传递给服务端,base64又是一种可逆的算法。

因此 HttpBasic 的应用场景非常少,对于不重要的数据,用户比较少但是又想设置一重障碍的时候就可以考虑使用这种

整合Spring Security 搞一把

虽然这种认证模式不太重要,但是还是要了解,对于后面的学习至关重要,下面搭建一个项目演示一下

1. 添加maven依赖

直接添加Spring Security的依赖,如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. Spring Security 添加配置

由于陈某使用的是Spring Boot 2.x版本,此时的Spring Security 是5.x版本,默认的认证方式是form表单认证,因此需要配置一下HttpBasic认证模式,代码如下:

/**
* @author 公众号:码猿技术专栏
* @url: www.java-family.cn
* @description Spring Security的配置类
*/
@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: 00af0f93-7103-4c8a-87a4-23a050a4285c

我们可以通过浏览器进行登录验证,默认的用户名是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请求进行登录验证。

图片

整个流程都在BasicAuthenticationFilter#doFilterInternal()这个方法中,有兴趣的可以去看看。

责任编辑:武晓燕 来源: 码猿技术专栏
相关推荐

2009-08-26 16:17:10

选华为认证放弃思科

2013-12-27 15:42:34

小米闪购

2015-10-20 09:07:44

2019-05-31 09:32:02

CopyOnWriteKafka内核

2020-04-16 10:02:47

猎豹移动谷歌下架

2012-06-25 09:46:02

Java

2018-06-14 00:36:18

物联网工业4.0农业

2018-03-30 10:28:23

2012-10-16 10:28:47

微软Windows 8

2015-08-14 13:34:55

斯诺登NSA

2013-01-17 14:41:33

Feed Dashbo

2023-03-29 13:06:36

2009-07-22 08:55:11

Windows 7XP模式64位操作系统

2019-03-22 09:00:17

比尔·盖茨AI教育和医疗

2022-02-13 22:42:52

设计模式策略

2014-09-18 10:01:53

Linux

2024-07-03 13:32:28

2010-08-09 12:39:37

2013-03-06 09:28:04

儿童应用移动应用应用内付款
点赞
收藏

51CTO技术栈公众号