# OAuth2-authorization **Repository Path**: ibdp/oauth2-authorization ## Basic Information - **Project Name**: OAuth2-authorization - **Description**: 基于SA-TOKEN的OAuth2.0的实现 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-20 - **Last Updated**: 2026-01-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OAuth2.0 认证授权系统 ## 项目介绍 本项目是基于 Spring Boot 和 Sa-Token 框架实现的 OAuth2.0 认证授权系统,提供了完整的 OAuth2.0 协议实现,包括授权码模式、密码模式、客户端凭证模式等多种授权方式,支持自定义授权类型和作用域,可用于构建企业级的认证授权服务。 ## 模块组成 | 模块名称 | 模块类型 | 主要功能 | |---------|---------|---------| | OAuth2-authorization | 父模块 | 统一依赖管理和构建配置 | | OAuth2-authorization-client | 子模块 | OAuth2.0 客户端实现 | | OAuth2-authorization-server | 子模块 | OAuth2.0 服务器实现 | ## 模块说明 ### 1. OAuth2-authorization(父模块) - 统一管理项目依赖版本 - 配置公共构建插件 - 定义项目基本信息 ### 2. OAuth2-authorization-client(客户端模块) #### 功能说明 - 实现 OAuth2.0 客户端的各种授权模式 - 支持授权码模式登录 - 支持密码模式登录 - 支持客户端凭证模式获取令牌 - 支持刷新令牌机制 - 提供用户信息获取接口 #### 主要文件结构 ``` src/main/java/cn/com/zlit/oauth2/ ├── OAuth2ClientApplication.java # 客户端启动类 ├── controller/ │ └── SaOAuthClientController.java # 客户端主要控制器 └── utils/ └── SoMap.java # 工具类 ``` #### 核心功能 - `codeLogin`:授权码模式登录 - `refresh`:刷新访问令牌 - `passwordLogin`:密码模式登录 - `clientToken`:获取客户端令牌 - `getUserinfo`:获取用户信息 ### 3. OAuth2-authorization-server(服务器模块) #### 功能说明 - 实现 OAuth2.0 服务器的完整功能 - 支持多种授权类型 - 支持自定义授权类型(如手机号验证码登录) - 支持自定义作用域 - 提供资源服务器功能 - 支持 H5 场景的授权流程 #### 主要文件结构 ``` src/main/java/cn/com/zlit/oauth2/ ├── OAuth2ServerApplication.java # 服务器启动类 ├── controller/ │ ├── SaOAuth2ResourcesController.java # 资源服务器控制器 │ └── SaOAuth2ServerController.java # 授权服务器主控制器 ├── custom_grant_type/ # 自定义授权类型 │ ├── CustomPasswordGrantTypeHandler.java │ ├── PhoneCodeGrantTypeHandler.java │ └── PhoneLoginController.java ├── custom_scope/ # 自定义作用域 │ ├── CustomOidcScopeHandler.java │ └── UserinfoScopeHandler.java ├── h5/ │ └── SaOAuth2ServerH5Controller.java # H5 授权控制器 ├── mock/ │ └── SaClientMockDao.java # 模拟客户端数据访问 ├── satoken/ │ ├── GlobalExceptionHandler.java # 全局异常处理 │ └── SaTokenConfigure.java # Sa-Token 配置 ├── test/ │ ├── Test2Controller.java │ └── TestController.java └── util/ └── SaOAuth2DataLoaderImpl.java # OAuth2 数据加载实现 ``` #### 核心功能 - 授权码模式处理 - 密码模式处理 - 客户端凭证模式处理 - 刷新令牌处理 - 自定义手机号验证码登录 - 资源访问控制 - H5 场景授权 ## 依赖环境 ### 开发环境 - JDK 1.8+ - Maven 3.6+ - Redis 5.0+(用于令牌存储) ### 主要依赖 - Spring Boot 2.5.14 - Sa-Token 1.44.0 - Sa-Token-OAuth2 1.44.0 - Sa-Token-Redis-Jackson 1.44.0 - Thymeleaf - OkHttps 3.1.1 ## 编译打包方式 ### 1. 编译整个项目 ```bash # 在项目根目录执行 mvn clean compile ``` ### 2. 运行单元测试 ```bash # 在项目根目录执行 mvn test ``` ### 3. 打包项目 ```bash # 在项目根目录执行 mvn clean package ``` ### 4. 安装到本地仓库 ```bash # 在项目根目录执行 mvn clean install ``` ## 启动方式 ### 1. 启动 Redis 服务 确保 Redis 服务已启动,默认配置连接本地 Redis(端口 6379)。 ### 2. 启动 OAuth2 服务器 #### 方式一:使用 IDE 直接运行 - 打开 `OAuth2ServerApplication.java` - 右键点击 `main` 方法,选择 "Run As" → "Java Application" #### 方式二:使用 Maven 命令启动 ```bash # 进入服务器模块目录 cd OAuth2-authorization-server # 启动服务 mvn spring-boot:run ``` #### 方式三:使用打包后的 Jar 包启动 ```bash # 打包后进入服务器模块 target 目录 cd OAuth2-authorization-server/target # 启动服务 java -jar OAuth2-authorization-server-0.0.1.jar ``` ### 3. 启动 OAuth2 客户端 #### 方式一:使用 IDE 直接运行 - 打开 `OAuth2ClientApplication.java` - 右键点击 `main` 方法,选择 "Run As" → "Java Application" #### 方式二:使用 Maven 命令启动 ```bash # 进入客户端模块目录 cd OAuth2-authorization-client # 启动服务 mvn spring-boot:run ``` #### 方式三:使用打包后的 Jar 包启动 ```bash # 打包后进入客户端模块 target 目录 cd OAuth2-authorization-client/target # 启动服务 java -jar OAuth2-authorization-client-0.0.1.jar ``` ## 访问地址 ### 服务器端 - 首页:http://localhost:8000 - 登录页:http://localhost:8000/oauth2/login - 授权页:http://localhost:8000/oauth2/confirm ### 客户端 - 首页:http://localhost:8001 ## 配置文件 ### 服务器配置(application.yml) 主要配置项: - 服务器端口 - Redis 连接信息 - Sa-Token 配置 - OAuth2 相关配置 ### 客户端配置(application.yml) 主要配置项: - 服务器端口 - OAuth2 服务器地址 - 客户端 ID 和密钥 ## 授权流程示例 ### 1. 授权码模式 1. 客户端请求授权:`http://localhost:8000/oauth2/authorize?client_id=1001&redirect_uri=http://localhost:8001/callback&response_type=code&scope=userinfo` 2. 用户登录并授权 3. 服务器返回授权码到回调地址 4. 客户端使用授权码换取访问令牌 5. 客户端使用访问令牌访问资源 ### 2. 密码模式 1. 客户端直接使用用户名密码请求令牌:`http://localhost:8000/oauth2/token?grant_type=password&client_id=1001&client_secret=xxxx&username=admin&password=123456` 2. 服务器验证后返回访问令牌 3. 客户端使用访问令牌访问资源 ## 注意事项 1. 本项目为演示示例,生产环境使用时请: - 更换默认的客户端 ID 和密钥 - 配置安全的 Redis 连接 - 实现真实的用户数据访问 - 加强日志和监控 2. 自定义授权类型和作用域时,请参考已有的实现示例 3. 如需扩展更多 OAuth2 功能,可参考 Sa-Token 官方文档:https://sa-token.cc/ ## 许可证 本项目采用 MIT 许可证,详见 LICENSE 文件。