没有合适的资源?快使用搜索试试~ 我知道了~
oauth搭建过程.docx
需积分: 0 46 浏览量
2021-07-22
17:25:28
上传
评论
收藏 325KB DOCX 举报
温馨提示
oauth2的运行原理
资源详情
资源评论
资源推荐

1.3 搭建认证服务器
我们一般希望搭建的各个微服务系统是受保护的,只有通过合法的认证信息才能访问相关资源,所以在这
一节中,我们将借助 Spring Cloud OAuth 和 Spring Cloud Security 搭建一个统一给微服务发放访问令牌
的认证服务器 febs-auth。
OAuth2 协议简介
在微服务架构下,我们通常根据不同的业务来构建不同的微服务子系统,各个子系统对外提供相应的服务。
客户端除了浏览器外,还可能是手机 App,小程序等。在微服务架构出现之前,我们的系统一般为单体模
式,客户端只是单一的浏览器,所以通常情况下都是通过 Session 进行客户端,服务端通信,而随着客户
端种类越来越多,这种交互方式变得越来越困难,于是 OAuth 协议应运而生。
OAuth 是一种用来规范令牌(Token)发放的授权机制,目前最新版本为 2.0,其主要包含了四种授权模
式:授权码模式、简化模式、密码模式和客户端模式。Spring Cloud OAuth 对这四种授权模式进行了实现。
由于我们的前端系统是通过用户名和密码来登录系统的,所以这里只介绍密码模式。
密码模式简介
在密码模式中,用户向客户端提供用户名和密码,客户端通过用户名和密码到认证服务器获取令牌。流程
如下所示:
Resource Owner,资源所有者,即当前正在使用系统的用户;
Client,客户端,比如浏览器,App 等;
Authorization server,认证服务器,提供认证服务,并发放访问令牌。
如上图所示,密码模式包含了三个步骤:
1. 用户向客户端提供用户名和密码;
2. 客户端向认证服务器换取令牌;
3. 认证服务器发放令牌。
其中第 2 步客户端发出的 HTTP 请求,包含以下参数:
grant_type:授权类型,此处的值固定为 password,必选项。
username:用户名,必选项。
password:密码,必选项。
scope:权限范围,可选项。
搭建微服务认证服务器
在了解了 OAuth 协议和密码模式后,我们开始搭建认证服务器。点击 IDEA 菜单栏 File -> New ->
Module...,因为认证服务器也是一个 Spring Boot 应用,所以模板选择 Spring Initializr,Module SDK 选
择 JDK 1.8:
点击 Next,按照下图所示填写相关内容:
点击 Next,在依赖选择过程中,我们先不选择任何依赖,直接继续点击 Next:

填写模块名称和路径后,点击 Finish 完成创建,至此,项目结构如下所示:
我们修改 febs-auth 模块的 pom,内容如下所示:
<?xml version="1.0" encoding="UTF-8"?><project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cc.mrbird</groupId>
<artifactId>febs-cloud</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../febs-cloud/pom.xml</relativePath>
</parent>
<artifactId>febs-auth</artifactId>
<name>FEBS-Auth</name>
<description>FEBS-Cloud 认证服务器</description>
<dependencies>
<dependency>
<groupId>cc.mrbird</groupId>
<artifactId>febs-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>

</build></project>
在上述 pom 配置中,我们指定了父项目为 febs-cloud,并且引入了通用模块 febs-common,因为通用模
块 febs-common 里已经包含了 spring-cloud-starter-oauth2 和 spring-cloud-starter-security 依赖,所以这
里无需再次引入。
修改 febs-cloud 模块的 pom,在 modules 标签里引入 febs-auth:
<modules>
<module>../febs-common</module>
<module>../febs-register</module>
<module>../febs-auth</module></modules>
因为后续我们需要将认证服务器生成的 Token 存储到 Redis 中,并且 Redis 依赖可能会被多个微服务使用
到,于是我们在 febs-common 模块中引入 redis 相关依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-
redis</artifactId></dependency>
此外,我们需要将 febs-auth 服务注册到上一节搭建的 febs-register 中,所以我们在 febs-common 模块里
继续添加 Eureka 相关依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-
client</artifactId></dependency>
往 Eureak 服务端注册服务的应用称为 Eureka 客户端,所以上面引入的是 Eureka Client 相关依赖。
在 febs-auth 的入口类 FebsAuthApplication 上添加@EnableDiscoveryClient 注解,用
于开启服务注册与发现功能:
@EnableDiscoveryClient
@SpringBootApplication
public class FebsAuthApplication {

public static void main(String[] args) {
SpringApplication.run(FebsAuthApplication.class, args);
}}
接着编写配置文件 application.yml,内容如下所示:
server:
port: 8101
spring:
application:
name: FEBS-Auth
eureka:
instance:
lease-renewal-interval-in-seconds: 20
client:
register-with-eureka: true
fetch-registry: true
instance-info-replication-interval-seconds: 30
registry-fetch-interval-seconds: 3
serviceUrl:
defaultZone:
http://febs:123456@localhost:8001/register/eureka/
上述配置指定了应用端口号为 8101,服务名称为 FEBS-Auth(别的微服务可以通过这个名称从注册中心
获取 FEBS-Auth 提供的服务),剩下的为 Eureka 相关配置,含义如下:
eureka.instance.lease-renewal-interval-in-seconds,向 Eureka 服务端发送心
跳的间隔时间,单位为秒,用于服务续约。这里配置为 20 秒,即每隔 20 秒向 febs-register 发送心跳,表
明当前服务没有宕机;
eureka.client.register-with-eureka,为 true 时表示将当前服务注册到 Eureak 服务端;
eureka.client.fetch-registry,为 true 时表示从 Eureka 服务端获取注册的服务信息;
剩余33页未读,继续阅读















wh5556
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

评论0