SpringBoot3.4.1和Spring Security6.4.2结合OAuth2实现GitHub授权登录
SpringBoot3.4.1和Spring Security6.4.2结合OAuth2实现GitHub授权登录

前一篇文章SpringBoot3.4.1和Spring Security6.4.2实现基于内存和MySQL的用户认证。今天基于SpringBoot3.4.1和Spring Security6.4.2结合OAuth2实现GitHub授权登录。
完整代码在文章最后,如果觉得本篇文章对你有用,记得点赞、关注、收藏哦。你的支持是我持续更新的动力!
文章最后可以加入免费的Java技术栈沟通社群,请按照要求加入。在群中可以聊开发、系统设计、架构、行业趋势、AI等等话题
SpringBoot3专栏软件环境
- JDK17.0.12
- SpringBoot3.4.1
- Spring Security6.4.2
- Thymeleaf3.4.1
- OAuth2
- GitHub
- IDEA2024.3.2
我们先看本篇文章对应的项目结构,请看下图

1 OAuth2相关角色
- 资源拥有者(Resource Owner)
- 客户端应用(Client)
- 资源服务器(Resource Server)
- 授权服务器(Authorization Server)
OAuth2详细文档
https://datatracker.ietf.org/doc/html/rfc6749
2 OAuth2 四种认证模式
- 授权码模式
- 密码模式
- 客户端凭证模式
- 隐式许可模式

3 基于Spring Security6.4.2结合OAuth2实现GitHub授权登录
3.1 官方文档
https://docs.spring.io/spring-security/reference/servlet/oauth2/index.html
3.2 OAuth2授权登录流程

3.3 在GitHub创建应用
登录GitHub,在开发者设置中找到OAuth Apps,创建一个application,为客户端应用创建访问GitHub的凭证


上图中的回调地址修改为http://localhost:8080/itbeien/login/oauth2/code/github,图片中少了code
创建成功后会生成下图中的Client ID,在后续的代码开发中需要使用到

另外我们需要生成Client secrets,生成好后需要及时保存


3.4 项目代码实现
3.4.1 父工程pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity6</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.4.2 子工程pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
</dependencies>
3.4.3 配置信息
server.port=8080
server.servlet.context-path=/itbeien
spring.security.oauth2.client.registration.github.client-id=github-client-id
spring.security.oauth2.client.registration.github.client-secret=github-client-secret
3.4.4 controller层代码实现
package cn.itbeien.security.oauth2.controller;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* Copyright© 2025 itbeien
*/
@Controller
public class OAuth2GitHubController {
@GetMapping("/")
public String index(Model model, @RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient authorizedClient,
@AuthenticationPrincipal OAuth2User oauth2User) {
model.addAttribute("userName", oauth2User.getName());
model.addAttribute("clientName", authorizedClient.getClientRegistration().getClientName());
model.addAttribute("userAttributes", oauth2User.getAttributes());
return "index";
}
}
3.5 代码测试
3.5.1 启动项目

3.5.2 访问项目
在浏览器中访问http://localhost:8080/itbeien,会出现如下的GitHub授权页面

出现如下界面代表授权成功

以上就是我们今天SpringBoot3.4.1和Spring Security6.4.2结合OAuth2实现GitHub授权登录的全部内容,完整代码在文章最后进行获取!
欢迎大家关注我的项目实战内容itbeien.cn,一起学习一起进步,在项目和业务中理解各种技术。

欢迎沟通交流技术和支付业务,一起探讨聚合支付/预付卡系统业务、技术、系统架构、微服务、容器化。并结合聚合支付系统深入技术框架/微服务原理及分布式事务原理。加入我的知识星球吧

SpringBoot3专栏
01SpringBoot3专栏-SpringBoot3.4.0整合Mybatis-plus和Mybatis
02SpringBoot3.4.0结合Mybatis-plus实现动态数据源
03mapstruct对象映射在Springboot3中这样用就对了
04RocketMQ5.3.1集成SpringBoot3.4.0就这样简单
05SpringBoot3.4.0整合Redisson实现分布式锁
06MySQL增量数据同步利器Canal1.1.7环境搭建流程
07SpringBoot3.4.0集成Canal1.1.7实现MySQL实时同步数据到Redis
08基于Docker-SpringBoot3.4.0集成Apache Pulsar4.0.1实现消息发布和订阅
09SpringBoot3.4.0整合消息中间件Kafka和RabbitMQ
10SpringBoot3.4.0整合ActiveMQ6.1.4
11SpringBoot3整合Spring Security6.4.2 安全认证框架实现简单身份认证
12SpringBoot3.4.1和Spring Security6.4.2实现基于内存和MySQL的用户认证
跟着我学微服务系列
01跟着我学微服务,什么是微服务?微服务有哪些主流解决方案?
05SpringCloudAlibaba之图文搞懂微服务核心组件在企业级支付系统中的应用
06JDK17+SpringBoot3.4.0+Netty4.1.115搭建企业级支付系统POS网关
07JDK17+SpringCloud2023.0.3搭建企业级支付系统-预付卡支付交易微服务
08JDK17+Dubbo3.3.2搭建企业级支付系统-预付卡支付交易微服务
09JDK17+SpringBoot3.3.6+Netty4.1.115实现企业级支付系统POS网关签到功能
贝恩聊架构-项目实战地址
欢迎大家一起讨论学习,加我备注"JAVA"拉你进入技术讨论群,在技术学习、成长、工作的路上不迷路!加我后不要急,每天下午6点左右通过!营销号免入

4 源码地址
贝恩聊架构-SpringBoot3专栏系列文章、资料和源代码会同步到以下地址,代码和资料每周都会同步更新
该仓库地址主要用于贝恩聊架构-SpringBoot3专栏、基于企业级支付系统,学习微服务整体技术栈
