第一章 SpringSecurity 介绍
应用程序的安全性主要体现在两个方面:身份验证(authentication)
和授权(authorization)(或叫做 访问控制(access-control))
,同样,这也是 SpringSecurity 的两大目标。
一、身份验证 Authentication
Spring Security 支持以下的技术集成,这里只写几种常见的并简单介绍:
- HTTP BASIC authentication headers
- 请求头身份验证
- 需要在请求头中添加 “Authorization: Basic 用户和密码的base64加密字符串”
- 或者在url中添加用户名和密码:“http://username:password@api.luokaiii.cn/login”
- LDAP
- 一种非常常见的跨平台身份验证,常见于大型服务
- 通过WSS3.0 和轻量级目录协议LDAP一起搭建的认证方式
- 做法是:将用户数据放在LDAP服务器上,通过LDAP服务器上的数据对用户进行认证处理。
- 即登录时将用户名密码,发送给 LDAP服务器进行匹配,判断是否通过认证
- Form-based authentication
- 表单身份验证
- OpenID authentication
- 一种去中心化的网上身份认证系统
- 使用方法:在一个支持OpenID身份提供者的网站上进行注册,然后使用该网站提供的url来进行认证
- Jasig Central Authentication Service(CAS)
- CAS 集中式认证服务封路系统,也是一个流行的开源单点登录系统
- CAS 系统一般分为 CAS Server(负责对用户进行认证) 和 CAS Client(处理用户名、密码等凭证)
- 流程为:用户访问Client服务 》 Client重定向至SSO服务器 》 身份认证 》 返回一个 Service Ticket 》 SSO服务器验证Ticket 》 允许访问
- Automatic ‘remember-me’ authentication
- 记住我
- Anonymous authentication
- 你们身份验证
- Java Open Source Single Sing-On
- Java 开源的单点登录 JOSSO
二、Spring Security 依赖管理
获取 Spring Security 的最小依赖如下:
<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
</dependencies>
Core - spring-security-core.jar
包含核心身份验证和访问控制类、接口、远程处理支持和基本的API。是 Spring Security 应用程序的基础包。
- org.springframework.security.core
- 包含Context上下文、UserDetails、UserDetailsService、jdbc验证、memory验证、token、Authority、Principal等支持
- org.springframework.security.access
- 访问控制类和接口
- 包含Method拦截器、AccessDeniedException、认证失败事件、无授权事件、日志监听、访问拦截器等
- org.springframework.security.authentication
- 包含数据库验证、RememberMe、Test、Token、Exception等支持
- org.springframework.security.provisioning
- 包含创建、更新、删除、修改密码等操作UserDetails的接口,支持memory、JDBC两种类型
Web - spring-security-web.jar
包含过滤器和相关的网络安全基础设施代码。
是 web 身份验证服务和基于 url 访问控制的基础。
Config - spring-security-config.jar
包含 安全名称空间解析代码(或者Java配置代码),即xml配置和java配置。
— 以下包都是可选的 —-
CAS - spring-security-cas.jar
Spring Security 的 CAS 客户端集成,对 CAS 单点登录服务器使用 。SpringSecurityWeb 身份验证的基础。
Test - spring-security-test.jar
支持使用 Spring Security 进行测试。后面会详细说明 Spring Security 是如何进行测试的。
LDAP - spring-security-ldap.jar
LDAP 身份验证和配置代码,如果需要使用 LDAP 身份验证或管理 LDAP 用户条目,则必须使用此依赖
OAuth 2.0 Core - spring-security-oauth2-core.jar
OAuth 2.0 授权框架和 OpenID Connect Core 1.0 的核心类和接口。
客户机、资源服务器、授权服务器都需要此依赖。
OAuth 2.0 Client - spring-security-oauth2-client.jar
OAuth 2.0 客户端,当需要使用 OAuth2.0 登录或者 OAuth客户端支持时使用。
OAuth 2.0 JOSE - spring-security-oauth2-jose.jar
包含 Spring Security 对 JOSE(JavaScritp 对象签名和加密)框架的支持,包含如下规范:
- JSON Web Token - JWT
- JSON Web Signature - JWS
- JSON Web Encryption - JWE
- JSON Web Key - JWK
OpenID - spring-security-openid.jar
支持 OpenID web 身份验证,用于根据外部 OpenID服务器对用户进行身份验证。
ACL - spring-security-acl.jar
专用域对象 ACL 的实现。