权限学习 -- Spring Security入门初识

Spring Security为基于J2EE开发的企业级应用软件提供了全面的安全服务,特别是使用基于Spring框架开发的企业软件项目。目前使用Spring Security有很多原因,通常是J2EE规范或者在EJB规范中找不到典型企业场景的应用方案。不能在war或者ear级别进行移植。

Spring Security的主要组件有安全拦截器(认证拦截器、访问决策管理器、运行身份管理器)。

Spring Security提供了很多的过滤器,能够拦截servlet请求,并将请求交由认证过滤处理器和访问决策过滤器进行处理,并强制安全性,认证用户身份和权限达到保护web的目的。Spring Security安全机制主要包括两个方面,认证及验证。认证是为用户建立一个它所声明的一个主体的过程,这个主体一般般是指用户、设备或者能够在系统中执行行动的其他系统。验证是指用户能否在应用中执行某个操作,在到达授权判断之前,身份的主体已经由身份验证过程建立了。在身份验证层面,Spring Security广泛的支持各种身份验证模式。

Basic认证:HTTP Basic认证是在HTTP1.0提出的认证方法。基于 challenge/response的认证模式。这种认证方法对访问特定的资源需要提供用户名跟密码之后才可访问。其中密码是使用明文传输的。一个请求到来时,浏览器弹出对话框,让用户输入用户名和密码,并用Base64进行编码,实际是以“用户名:密码”的形式进行编码。浏览器会在HTTP报文头部加入Base64的编码内容,服务器解析出来这些信息,并认证通过,才可继续访问。基于Basic认证有两个明显的缺点,第一个是每次通信都要带上认证信息即使是已经认证过的资源。第二,传输的安全性不足。认证信息用的是Base64编码,相当于就是明文传输。很容易对报文进行截取,并盗用认证信息。

Digest认证:HTTP Digest认证,主要是为了解决Basic模式的安全问题。用来替换原来的Basic认证模式。同样是基于 challenge/response的认证模式。当访问特定的资源时,浏览器依然会弹出对话框,让用户输入用户名和密码。浏览器会对用户名、密码。HTTP请求方法、被请求资源的URI进行组合后做MD5运算。之后把计算得到的摘要信息发送给服务器,服务器web容器获取到HTTP报文头部相关认证信息后,从中获取username,根据username获取对应的密码。同样对用户名、密码。HTTP请求方法、被请求资源的URIMD5运算,计算的结果和response进行比较,如果相同,才让认证通过。通过hash算法,对通信双方的身份进行认证,十分常见,好处就是不必把包含密码的信息对外传输,只要对密码信息加入给一个给定的随机值,然后来计算出hash值,最后将hash值传给对方,对方即可认证身份。Digest认证避免了密码在网络上的明文传输,提高了安全性,但他仍然存在了缺点。比如认证的报文被攻击者拦截到,攻击者也可以获取获取到资源。

X.509证书认证:X.509是一种非常通用的证书格式。所有的X.509证书包含以下数据,X.509的版本号,证书持有者的公钥,证书的序列号。证书的序列号是有CA给予的每一个证书分配的唯一的数字型编号。当证书被取消时,实际上是将此证书的序列号放入由CA签发的证书的黑名单列表中,这也是序列号唯一的原因。除此之外X.509证书还包含主题信息,证书的有效期,认证机构,发布者的数字签名,签名的算法等等。X.509证书目前已经被微软、网警、和其他许多公司广泛的应用于对电子邮件信息进行签名,对程序代码进行认证,以及对其他类型数据进行等等。

LDAP认证:LDAP是轻量级的目录访问协议。企业内部需要认证的服务很多。员工需要记住很多的密码,即使对这些服务密码进行相同的设置,也会存在很大的安全隐患。需要企业都会遇到这种情况,每个新员工到来的时候,管理员都要初始化很多密码而这些密码都被设置成了类似888888这种弱密码。由于各个软件认证机制之间没有使用一个统一的标准,员工无法一次性修改所有服务的密码,这导致很多即使是入职很久的员工都还在使用这个众所周知的密码,另外一个比较严重的问题出现在公司增加内部服务的时候,管理员需要为所有的员工初始化新的账户信息,对于一个有上千企业的员工来说,这将是一个灾难,如果可以为各种软件提供一个标准的认证机制,所有的软件就可以不在使用独有的用户管理方法。而是通过这种统一的认证机制进行用户认证,这样就解决了很多企业目前遇到的问题,统一身份认证主要是改变原有的认证策略,使需要认证的软件都通过LDAP进行认证,用户的所有的信息都存储在LDAP服务中。终端用户在需要使用公司内部服务的时候都需要通过LDAP服务器的认证,每个员工值需要记住一个密码,在需要修改用户信息的时候可以通过管理员提供的web界面直接修改自己在LDAP服务中信息即可。目前市面上的大公司的内部系统基本都是使用LDAP认证。

Form认证:基于表单的认证。这种认证是提供简单的用户接口来验证用户名及密码。

  实际中这些基本的认证都是不够的,有时,需要根据主体和应用交互的方式来应用不同的安全措施,例如:为了保护密码不被窃听或受到中间人的攻击,希望确保请求只能通过HTTPS到达,这种在防止暴力攻击,保护密码恢复过程特别的有帮助。或者简单一点让人难以复制你的系统的关键字内容。为了帮助你实现这些目标,Spring Security还支持自动的信道安全,它整合了Kaptcha验证码的插件,进行人的用户检测,通过每次用户认证时,需要输入不同的验证码;来参与认证。

你可能感兴趣的:(权限学习 -- Spring Security入门初识)