spring security 5 (9)-httpBasic基本认证

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangb_java/article/details/86502166

httpBasic是由http协议定义的最基础的认证方式。每次请求时,在请求头Authorization参数中附带用户/密码的base64编码,参考base64。这个方式并不安全,不适合在web项目中使用。但它是一些现代主流认证的基础,而且在spring security的oauth中,内部认证默认就是用的httpBasic。

httpBasic基本配置

注意,这里没有配formLogin,也就不会再有formLogin相关的默认url和配置。

	protected void configure(HttpSecurity http) throws Exception  {
		http
			.authorizeRequests()    
				.anyRequest().authenticated().and()    
			.httpBasic().and()	//httpBasic认证
			.csrf().disable();           
	}

启动项目,打开浏览器,这里以Chrome为例,先按F12开启调试窗口,请求http://localhost:8080/hello 被拦截

Basic Authorization

点击取消,在调试窗口中查看该请求的响应头,其中有个WWW-Authenticate: Basic realm="Realm"。

WWW-Authenticate:服务器告知浏览器代理认证工作。

Basic:认证类型为Basic。

realm="Realm":认证域名为Realm,这个后面再讲。

此时的响应码为401,根据401和以上响应头,浏览器会接管工作,它会弹出上面那个框要求输入用户名/密码,并将其拼接成“用户名:密码”格式,中间是一个冒号,再用base64编码成xxx,然后在请求头中附加Authorization:Basic xxx,发给后台认证。后台需要用base64解码xxx,再认证用户名/密码。

认证错误:浏览器会保持弹框。

认证成功:浏览器会缓存有效的base64编码,在之后的请求中,浏览器都会在请求头中添加有效编码。

用postman模拟请求

在postman中选择Authorization的Basic Auth类型,右边输入预置的用户名和密码,send发送请求,显示hellow world。

关于以上配置的实际作用,我们来看一下请求头Headers。

它其实是在请求头中生成了一个Authorization参数,value为Basic xxx,xxx就是postman自动生成的base64编码。

注销

因为Basic会把Authorization保存在浏览器,之后每次请求都会带上,一直到用户关闭浏览器才会销毁,也就是说你无法在服务端有效的注销。不过在请求注销时,前端可以手动在请求头配置一个错的Authorization,也能起到注销效果。

realm

realm="Realm":指认证域名为Realm。在未认证用户请求不同的接口时,后台根据给该接口分配的域,可以响应不同的realm名,并且用不同用户名/密码进行认证。所以用户每请求一个新Realm的url,都会弹框要求用新Realm的用户名/密码进行认证,就好比不同的角色登录只能请求属于该角色的url。httpBasic默认realm名为Realm,可以用以下方式配置。

.httpBasic().realmName("Realm")

猜你喜欢

转载自blog.csdn.net/wangb_java/article/details/86502166