SAS-OAuth2-Resource-Server
一、前言
书接上文,本次来对接一下资源服务,在本篇文章中会带领大家去构建一个资源服务器,通过注解校验token中的权限,怎么放行一个接口,使其不需要认证也可访问。
二、流程解析

没有携带token访问认证信息会抛出AccessDeniedException异常,并且会调用BearerAuthenticationEntryPoint去处理。

请求携带token到达资源服务器后会使用BearerTokenAuthenticationFilter去解析和校验token,成功会将认证信息存入SecurityContextHolder中并继续往下执行,失败则调用AuthenticationEntryPoint返回异常信息。以上两种异常处理默认都是在响应头中添加,响应头是WWW-Authenticate,值就是具体的异常信息。
三、整合过程
- 创建项目
- 添加resource server和web依赖
- 添加yml配置
resource server和oauth2 client一样,是一个单独的服务,不需要跟认证服务器的版本保持一致,读者可自选springboot版本,它们之间通过oauth2的协议可以无缝对接。
1. 创建项目
通过IDEA或Spring Initializr创建一个项目,同时选择web和OAuth2 Resource Server依赖。
pom.xml如下
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>resource-server-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>resource-server-example</name>
<description>resource-server-example</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. 添加yml配置
server:
# 设置资源服务器端口
port: 8100
spring:
security:
oauth2:
# 资源服务器配置
resourceserver:
jwt:
# Jwt中claims的iss属性,也就是jwt的签发地址,即认 证服务器的根路径
# 资源服务器会进一步的配置,通过该地址获取公钥以解析jwt
issuer-uri: http://192.168.120.33:8080
至此,一个简易的资源服务就搭建完毕了,资源服务比客户端服务的逻辑稍微简单些,就是从认证服务获取公钥,然后解析jwt类型的token。