Spring Security权限框架理论与实战演练1 Spring Security权限管理框架介绍2 Spring Security常用权限拦截器讲解

本章首先让大家学习到Spring Security权限框架的架构,之后大家可以学习到Spring Security权限框架的核心概念,包括拦截器、数据库管理、缓存、自定义决策等等,之后会手把手带大家基于Spring Boot+Spring Security搭建一套演练环境,并带着大家在Spring Security权限框架常见的应用场景下对框架常用的API功能进行编码...

1 Spring Security权限管理框架介绍

1.1 常见认证模式

1.1.1 Basic 模式

HTTP协议规范中有两种认证方式,一种是Basic认证,另外一种是Digest 认证,这两种方式都属于无状态认证方式

  • 所谓无状态即服务端都不会在会话中记录相关信息,客户端每次访问都需要将用户名和密码放置报文一同发送给服务端,但这并不表示你在浏览器中每次访问都要自己输入用户名和密码,可能是你第一次输入账号后浏览器就保留在内存中供后面的交互使用

既然是HTTP协议规范,那其实就是约束浏览器厂商与web容器厂商实现各自软件时的行为约束,例如典型的一个认证交互过程是:浏览器向 web容器发送http请求报文,web容器接收到 http请求报文后解析需要访问的资源,如果该资源刚好是受保护资源,web容器则向浏览器发送认证http 响应报文,浏览器接收到报文后弹出窗口让用户输入账号及密码,接着再次发送包含了账号信息的http请求报文,web容器对账号信息进行鉴权,通过验证则返回对应资源,否则重新认证。

Basic Access Authentication scheme是在HTTP1.0提出的认证方法,它是一种基于challenge/response的认证模式,针对特定的 realm需要提供用户名和密码认证后才可访问,其中密码使用明文传输

Basic模式认证过程如下 ①浏览器发送http报文请求一个受保护的资源 ②服务端的web容器将http响应报文的响应码设为401 ,响应头部加入WWW-Authenticate: Basic realm=”myTomcat”。 ③浏览器弹出对话框让用户输入用户名和密码,并用Base64进行编码,实际是用户名+冒号+ 密码进行Base64编码,即Base64(username:password),这次浏览器就会在 HTTP报文头部加入Authorization: Basic bXl0b21jYXQ= ④服务端web容器获取HTTP报文头部相关认证信息,匹配此用户名与密码是否正确,是否有相应资源的权限,如果认证成功则返回相关资源,否则再执行②,重新进行认证。 ⑤以后每次访问都要带上认证头部。

服务端返回的认证报文中包含了realm=”myTomcat”,realm的值用于定义保护的区域,在服务端可以通过realm 将不同的资源分成不同的域,域的名称即为realm的值,每个域可能会有自己的权限鉴别方案。

Basic认证模式有两个明显的缺点 ①无状态导致每次通信都要带上认证信息,即使是已经认证过的资源 ②传输安全性不足,认证信息用Base64编码,基本就是明文传输,很容易对报文截取并盗用认证信息

1.1.2 Digest

HTTP协议规范的另一种认证模式Digest模式,在HTTP1.1 时被提出来,主要为解决Basic模式安全问题,用于替代原来的Basic认证模式, Digest认证也是采用challenge/response认证模式,基本的认证流程比较类似,整个过程如下 ①浏览器发送http报文请求一个受保护的资源 ②服务端的web容器将http响应报文的响应码设为401 ,响应头部比Basic模式复杂

WWW-Authenticate: Digest realm=”myTomcat”,qop="auth",nonce="xxxxxxxxxxx",opaque="xxxxxxxx"  

其中qop的auth表示鉴别方式;nonce 是随机字符串;opaque服务端指定的值,客户端需要原值返回 ③浏览器弹出对话框让用户输入用户名和密码,浏览器对用户名、密码、nonce值、HTTP请求方法、被请求资源 URI等组合后进行MD5运算,把计算得到的摘要信息发送给服务端。请求头部类似如下

Authorization: Digest username="x xxxx",realm="myTomcat",qop="auth",nonce="xxxx x",uri="xxxx",cnonce="xxxxxx",nc=00000001,response="x xxxxxxxx",opaque="xxxxxxxxx"

其中username 是用户名;cnonce是客户端生成的随机字符串;nc是运行认证的次数; response就是最终计算得到的摘要。 ④服务端web容器获取HTTP报文头部相关认证信息,从中获取到username ,根据username获取对应的密码,同样对用户名、密码、nonce值、 HTTP请求方法、被请求资源URI等组合进行MD5运算,计算结果和 response进行比较,如果匹配则认证成功并返回相关资源,否则再执行②,重新进行认证 ⑤以后每次访问都要带上认证头部

其实通过哈希算法对通信双方身份的认证十分常见,它的好处就是不必把具备密码的信息对外传输,只需将这些密码信息加入一个对方给定的随机值计算哈希值,最后将哈希值传给对方,对方就可以认证你的身份 Digest思想同样采如此,用了一种 nonce随机数字符串,双方约好对哪些信息进行哈希运算即可完成双方身份的验证。Digest模式避免了密码在网络上明文传输,提高了安全性 但它仍然存在缺点,例如认证报文被攻击者拦截到攻击者可以获取到资源

2 Spring Security常用权限拦截器讲解

2-3 Spring Security数据库管理讲解 2-4 Spring Security权限缓存讲解 2-5 Spring Security自定义决策讲解 2-6 基于SpringBoot的SpringSecurity环境快速搭建与验证 2-7 SpringBoot常用注解讲解 2-8 基于SpringSecurity权限管理Case实操 2-9 SpringSecurity权限管理框架总结

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴伟祥

单点登录原理与简单实现 原

web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联...

1145
来自专栏散尽浮华

nginx下目录浏览及其验证功能、版本隐藏等配置记录

工作中常常有写不能有网页下载东西的需求,在Apache下搭建完成后直接导入文件即可达到下载/显示文件的效果; 而Nginx的目录列表功能默认是关闭的,如果需要打...

2509
来自专栏java技术学习之道

单点登录原理与简单实现

1342
来自专栏JetpropelledSnake

Python Web学习笔记之Cookie,Session,Token区别

2377
来自专栏编程

爬虫基本原理完全梳理及常用解析方式

什么是爬虫:即网络爬虫,可以理解为在网络上爬行的一只蜘蛛,互联网可以比喻为一张大网,一只蜘蛛在爬行时遇到了所需的资源就可以把它爬取下来。简单来说,爬虫就是请求网...

2017
来自专栏java系列博客

【redis】安装与运行:Creating Server TCP listening socket 127.0.0.1:6379: bind: No error

2875
来自专栏温安适的blog

基于zookeeper+leveldb的activemq集群

4474
来自专栏运维

DNS服务器(五):使用queryperf对DNS服务器作压力测试

   当我们把DNS服务器配置好后,我们肯定会想测试一下DNS服务器的性能如何,上线后如果请求数够多服务器还能否响应?于是,我们可以使用软件模拟环境,对DNS...

2413
来自专栏程序员互动联盟

如何简单快速调试高大上的谷歌浏览器

上一篇我们简单的将了在Ubuntu上编译chromium,android content_shell_apk的编译,一切顺利的就能生成apk。但是我们仅仅只是照...

37416
来自专栏微信公众号:Java团长

单点登录原理与简单实现

web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,...

1824

扫码关注云+社区