本课程以微服务分布式架构为基础,授权第三方应用访问存储在资源服务器上特定信息的业务场景作为实践案例,阐述Spring Security、OAuth2基础知识、鉴权校验JWT、非对称加密、注册中心微服务、配置中心微服务、授权微服务、资源微服务等实用技术,讲述企业级Spring Security OAuth2开发技术栈知识。

在本课程中,会讲到如下技术栈内容:

一、安全Spring Security

1、启用Spring Security

2、自定义用户服务信息

3、限制请求

二、OAuth2基础知识

1、OAuth2简介

2、OAuth2授权流程

3、OAuth2角色

4、OAuth2授权模式

三、鉴权校验JWT

1、JWT的构成

2、鉴权处理流程

四、非对称加密

1、资源服务授权流程

2、生成私钥公钥

3、导出公钥

五、注册中心微服务

1、父工程

2、引入依赖

3、启动类

4、配置文件

六、配置中心微服务

1、引入依赖

2、启动类

3、配置文件

七、授权微服务

1、导入数据库脚本

2、创建授权中心微服务工程

2.1 配置pom.xml引入依赖资源

2.2 创建启动类

2.3 配置文件

2.4 自定义用户认证服务

2.5 配置类

八、资源微服务

1、资源服务器配置

1.1 资源微服务授权

1.2 配置pom.xml引入依赖资源

1.3 配置文件

1.4 创建持久化类

1.5 创建DAO层接口类和映射文件

1.6 创建Service层接口类

1.7 创建控制层类

1.8 授权测试

2、Spring Security权限控制

2.1 角色加载

2.2 角色权限控制

2.3 角色权限控制测试

适合人群: 本课程是来自一线开发者的实战经验总结,对微服务分布式架构开发、设计感兴趣的所有技术人员。来源:《服务号-薇云科技》

一、安全Spring Security

为了提供安全的机制,Spring提供了安全框架Spring Security,它是一个能够为基于Spring生态圈,提供安全访问控制解决方案的框架。它提供了一组可以在Spring应用上下文中配置的机制,充分利用了Spring的强大特性,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

1、启用Spring Security

Spring Security解决了应用程序通用的安全性需求,包括身份验证、授权和API安全性。

保护Spring应用的第一步就是将Spring Boot security starter依赖添加到构建文件中。在项目的pom.xml文件中,添加如下的条目:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

当应用启动时,自动配置功能会探测到Spring Security出现在了类路径中,因此它会初始化一些基本的安全配置。在web工程中可以使用注解@EnableWebSecurity来驱动Spring Security的启动。

2、自定义用户服务信息

在Spring Security中默认是没有任何用户配置的,在Spring Boot中,如果没有用户的配置,它会自动生成一个名称为user、密码通过随机生成的用户。

Spring Security提供了一个UserDetailsService接口,通过它可以获取用户信息,而这个接口只有一个loadUserByUsername方法需要实现,这个方法定义返回UserDetails接口对象,在授权微服务中我们会详细讲解。通过下面授权微服务的UserDetailServiceImpl代码来实现这个接口,进而获取用户信息。

3、限制请求

在上述配置用户中,继承了抽象类WebSecurityConfigurerAdapter,这个抽象类提供了configure(HttpSecurity http)方法,通过该方法可以实现不用角色赋予不同权限的功能。

二、OAuth2基础知识
1、OAuth2简介

OAuth是一个开放标准,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像、照片、视频等),而在这个过程中无须将用户名和密码提供给第三方应用。实现这一功能是通过提供一个令牌token,而不是提供用户名和密码来访问他们存放在特定服务器上的数据。

每一个令牌授权一个特定的网站在特定的时段内访问特定的资源。这样,OAuth让用户可以授权第三方网站灵活地访问存储在另外一些资源服务器的特定信息,而非所有内容。目前主流的qq,微信等第三方授权登录方式都是基于OAuth2实现的。

OAuth2是OAuth协议的下一版本,但不向下兼容OAuth 1.0。OAuth2关注客户端开发者的简易性,同时为Web应用、桌面应用、移动设备提供专门的认证流程。

传统的Web开发登录认证一般都是基于Session的,但是在前后端分离的架构中继续使用Session会有许多不便,因为移动端(Android、iOS、微信小程序等)要么不支持Cookie,要么使用非常不便,对于这些问题,使用OAuth2认证都能解决。

2、OAuth2授权流程

在这里插入图片描述
客户端(第三方应用)向用户请求授权;用户单击客户端所呈现的服务授权页面上的同意授权按钮后,服务端返回一个授权许可凭证给客户端;客户端拿着授权许可凭证去授权服务器申请令牌;授权服务器验证信息无误后,发放令牌给客户端;客户端拿着令牌去资源服务器访问资源;资源服务器验证令牌无误后开放资源。

3、OAuth2角色

资源所有者(Resource Owner):代表授权客户端访问本身资源信息的用户,客户端访问用户帐户的权限仅限于用户授权的“范围”。

客户端(Client):代表意图访问受限资源的第三方应用。在访问实现之前,它必须先经过用户授权,并且获得的授权凭证将进一步由授权服务器进行验证。

授权服务器(Authorization Server):授权服务器用来验证用户提供的信息是否正确,并返回一个令牌给第三方应用。

资源服务器(Resource Server):资源服务器是提供给用户资源的服务器,例如头像、照片、视频等。

4、OAuth2授权模式

OAuth协议的授权模式共分为4种,分别说明如下:

授权码模式:授权码模式(authorization code)是功能最完整、流程最严谨的授权模式。它的特点就是通过客户端的服务器与授权服务器进行交互,国内常见的第三方平台登录功能基本都是使用这种模式。

简化模式:简化模式不需要客户端服务器参与,直接在浏览器中向授权服务器申请令牌,一般若网站是纯静态页面,则可以采用这种方式。

密码模式:密码模式是用户把用户名密码直接告诉客户端,客户端使用这些信息向授权服务器申请令牌。这需要用户对客户端高度信任,例如客户端应用和服务提供商是同一家公司。

客户端模式:客户端模式是指客户端使用自己的名义而不是用户的名义向服务提供者申请授权。严格来说,客户端模式并不能算作OAuth协议要解决的问题的一种解决方案,但是,对于开发者而言,在一些前后端分离应用或者为移动端提供的认证授权服务器上使用这种模式还是非常方便的。

三、鉴权校验JWT

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。

阅读全文…

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐