总体介绍
我们讲的是开源的spring security框架,我们主要分三个部分来说。
第一部分是spring security介绍。在这一部分里,我们会介绍spring security的架构及核心组件,包括spring security的认证权限拦截,数据库管理权限缓存以及自定义决策。第二部分是环境的搭建与使用,我们会使用当前比较热门的spring boot来搭建一套环境,结合项目中的一些实际的例子。来做几个权限管理的case。第三部分是spring security的优缺点,总结我们会结合第二部分里基于spring security的几个case的实现。来总结spring security的优点和缺点
介绍
如果你熟悉spring,尤其是spring的依赖注入原理。这将帮助你更快的掌握spring security
spring security提供了很多的过滤器。他们拦截server的请求,并将这些请求转交给认证处理过滤器和访问决策过滤器进行处理,并强制安全性。认证用户身份和用户权限以达到保护外表资源的目的。
组织security安全机制包括两个主要的操作认证和验证,验证也可以称为权限控制。这是spring security的两个主要的方向,认证是为用户建立一个他所声明的主体的过程。这个主体一般是指用户设备或可以在你系统中执行行动的其他系统。验证指的是一个用户能否在你的应用中执行某个操作。
在到达授权判断之前,身份的主体已经由身份验证过程建立了。当然了,这些概念是通用的,不是spring security特有的。**在身份验证层面,security广泛的支持各种身份验证模式,这些验证模型绝大多数都是由第三方提供或正在开发的有关标准机构提供的
接下来我们来说一下几种常见的验证模式
Basic认证
basic认证是在http 1.0提出的认证方法。它是一种基于challenge response的认证模式,这种方式针对特定的资源需要提供用户名和密码认证后才可访问。
密码是使用明文传输的一个请求,到来时浏览器先弹出对话框,让用户输入用户名和密码。并用base 64进行编码,实际是用户名加冒号加密码进行base 64编码,浏览器会在http报文头部加入base 64编码的内容。服务器解析出来,这些信息并认证通过才可继续访问。
两个缺点:
1. 它是无状态的,导致每次通信都要带上认证信息,即使是已经认证过的资源 2. 它传传输安全性不足,认证信息用的是base64编码,基本上就属于明文传输,很容易对报文。截取并盗用认证信息
digital认证
http digital认证主要是为了解决basic模式的安全问题,用于替代原来的basic认证模式。digital认证也是采用了challenge response的认证模式。当访问特定的资源时,浏览器依旧弹出对话框,让用户输入用户名和密码。浏览器会对用户名密码HTTP请求方法被请求资源的uri等组合后进行md5运算。之后把计算得到的摘要信息发送给服务器,服务器web容器获取到http报文头部相关认证信息后。从中获取到username,根据username获取对应的密码,同样对用户名密码http请求方法被请求资源uri等组合进行md5运算。计算的结果和response进行比较,如果相同才叫认证通过。其实,通过哈希算法对通信双方身份的认证十分常见,它的好处就是不必把包含密码的信息对外传输。只需要将这些密码信息加入一个对方给定的随机值,然后来计算出哈希值,最后将哈希值传给对方,对方就可以认证你的身份。
优点: 避免了密码在网络上的明文传输,提高了安全性 但它仍然存在缺点。比如认证的报文被攻击者拦截到。攻击者就也可以获取到资源。
http x509证书认证
x509,是一种非常通用的证书格式,所有的x509证书包含以下数据。s509的版本号证书,持有人的公钥证书的序列号。 这里我们重点对序列号做一下说明证书的序列号是由CA给予的,每一个证书分配的唯一的数字型编号。当证书被取消时,实际上是将此证书的序列号儿放入由CA签发的证书的黑名单列表中,这也是序列号儿唯一的原因。除此之外x569证书还包含主题信息证书的有效期认证,机构发布者的数字签名。签名的算法等等x509格式的证书目前已经被微软网警和其他许多公司广泛的应用于对电子邮件信息进行签名。对程序代码进行认证以及对许多其他类型的数据进行认证等等。
LDAP认证方式
LDAP是轻量级的目录访问协议,英文全称是lightweight directory assess protocol。一般都简称为LDAP。
问题背景: 企业内部需要认证的服务,很多员工需要记住很多的密码,即使对这些服务进行相同的密码设置,也是存在很大的安全隐患。许多企业都会遇到这种情况,每一个新员工到来的时候,管理员都要初始化很多密码,而这些密码都被设置成了类似。六个八这种弱密码由于各种软件的认证机制之间没有使用一个统一的标准,员工无法一次性的修改所有服务的密码。这导致很多即使是入职很久的员工都还在使用这个众所周知的密码,另外一个比较严重的问题出现在公司增加内部服务的时候。
管理员需要重新为所有的员工初始化新的账户信息,对于一个有上千员工的企业来说,这将是一个灾难。如果可以为各种软件提供一个标准的认证机制,所有软件就可以不再使用独有的用户管理方法。而是通过这种统一的认证机制进行用户认证,这样就解决了目前很多企业遇到的问题。
统一身份认证主要是改变原有的认证策略,是需要认证的软件都通过LDAP进行认证。用户的所有信息都存储在LDAP server中,终端用户在需要使用公司内部服务的时候。都需要通过LDAP服务器的认证,每个员工只需要记住一个密码,在需要修改用户信息的时候。可以通过管理员提供的web界面直接修改自己在LDAP server中的信息即可。
表单认证
这种认证方式是提供简单的用户接口来验证用户名密码,就不做过多的说明了。