Spring Boot总结(六):Spring Boot SSO

Spring Boot总结(一):入门

Spring Boot总结(二):Spring Boot中使用数据库

Spring Boot总结(三):Spring Boot界面设计

Spring Boot总结(四):提高数据库访问性能

Spring Boot总结(五):安全设计

Spring Boot总结(六):Spring Boot SSO

Spring Boot总结(七):使用分布式文件系统

Spring Boot总结(八):云应用开发

Spring Boot总结(九):构建高性能的服务平台

Spring Boot总结(十):自动配置实现原理

Spring Boot总结(十一):数据访问实现原理

Spring Boot总结(十二):微服务核心技术实现原理

6.1 模块化设计

模块化管理,其中,每个模块都是一个独立的项目:

  1. 数据库管理模块为其他模块提供数据管理支持
  2. 安全配置模块为客户端提供安全配置和授权管理支持
  3. 登录认证模块提供单点登录认证(即SSO)功能
  4. 共享资源模块为客户端提供用户需要的一些共享资源
  5. 多个Web客户端是使用SSO系统的两个实例

模块化设计的好处:可以提高代码的复用性,避免重复开发,从而提高开发速度和工作效率;

6.2 登录认证模块

如果只是本地的登录认证,只需要使用Spring Security就足够了,由于使用SSO实现了远程登录认证功能,所以在登录认证系统中,需要增加Oauth2协议,让它可以支持第三方应用的认证和授权;

登录认证系统将建立一个用户中心,对使用SSO服务的每一个应用系统,提供统一的用管理。而对于一个用户来讲,使用任何一个应用系统,都可以通过SSO的Oauth2协议进行认证和授权确认;

1. 使用OAuth2

【添加依赖】

spring-cloud-starter-oauth2

2.创建数字证书

Oauth2的认证服务中,需要一个数字证书,为通信中的数字签名等功能提供支持。

3. 认证服务端配置

  1. Oauth2服务端配置

编写配置类继承AuthorizationServerConfiguration。其中,使用注解@EnableAuthorizationServer来启用Oauth2的认证服务器功能。

  1. Spring Security配置

继承WebSecurityConfigurationAdapter可以提供记住用户状态等功能

6.3 安全配置模块

安全配置模块集成了SSO客户端的安全策略配置和权限管理功能,可以供使用SSO的客户端使用。

@EnableOAuth2Sso将应用标注为一个SSO客户端,重载的Configure方法使用了HttpSecurity来配置一些安全管理策略。

仍然是继承WebSecurityConfigureAdapter重载configure方法实现

6.4 SSO客户端

在SSO客户端中添加安全配置模块的依赖

1. 客户端配置

当客户端引用安全配置模块之后,就必须在配置文件application.yml中进行一些相关的配置,才能够正常使用。

包括两方面的配置:

security是Oauth2的配置;

securityconfig是Spring Security的配置;

2. 登录登出设计

退出的时候不仅需要保证在当前的客户端中退出,还需要在SSO服务端中执行退出请求,也就是说,不能在用户退出之后,在SSO认证服务端中还保留这用户的登录状态,如果这个时候返回原来的客户端,或者访问其他有授权的客户端,都不会要求用户登录就能正常访问;

6.5 共享资源服务

共享资源模块可以为已经授权的用户提供一些共享信息服务。

使用注解@EnableResourceServer来标注这个应用是一个资源服务器;

当一个应用被标注为资源服务器之后,就不能在浏览器中直接访问;

1. 提供共享资源接口

就是普通的控制器@RequestMapping

2. 使用共享资源

在客户端中要使用资源服务器的共享信息,可以使用spring-cloud-zuul提供的一个路由服务来实现。

  1. 它使用注解@EnableZuulProxy来启用Zuul路由代理服务;
  2. 在工程配置文件application.yml中配置一个路由资源器,其中path设定资源的访问路径,url指定路由的服务方;

3. 查询登录用户的详细信息

在单独使用Spring Security安全管理的应用中,只要在控制器中使用Principal,就能够取得用户的完整信息,或者使用Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

User user = (User)authentication.getDetails();

如果需要取得登录用户的详细信息,

6.6 运行与发布

工程代码:https://github.com/chenfromsz/spring-boot-sso.git

设定数据库密码命令:

grant all privileges on test .* to ‘root’@’localhost’ identified by ‘12345678’;

mvn clean package -D skipTests 跳过测试打包

6.7 小结

使用Spring Security的安全管理功能,结合使用Oauth2的认证授权协议,可以实现一个具有统一用户管理中心的SSO管理系统,实现能够为第三方应用提供登录认证和授权管理的功能,为企业的分布式应用系统开发,提供了切实可行的应用实例;

使用spring-cloud-zuul路由功能,可以通过SSO系统使用安全的共享资源;

系统的安全设计非常重要,但是系统的访问性能更加重要。

源代码地址:

https://github.com/chenfromsz/spring-boot-sso

需要在本地创建数据库,然后初始化一些数据;

你可能感兴趣的:(java,java,后端)