0

0

java怎么实现OAuth2认证 使用Spring Security集成OAuth2认证流程

幻夢星雲

幻夢星雲

发布时间:2025-10-29 23:17:05

|

1052人浏览过

|

来源于php中文网

原创

答案:使用Spring Security和Spring Boot可高效实现OAuth2认证。1. 添加spring-boot-starter-security、spring-security-oauth2-client等依赖;2. 在application.yml中配置GitHub等第三方客户端注册信息,包括client-id、scope及授权端点;3. 通过@EnableWebSecurity配置SecurityFilterChain,启用oauth2Login并设置登录成功跳转路径;4. 创建控制器与Thymeleaf模板提供登录入口;5. 若作为资源服务器,需配置oauth2ResourceServer并指定jwk-set-uri验证JWT令牌。该方案支持主流平台集成,标准化强,扩展性好。

java怎么实现oauth2认证 使用spring security集成oauth2认证流程

在Java中实现OAuth2认证,结合Spring Security和Spring Boot是目前最主流、简洁高效的方式。通过Spring Security OAuth2(注意:自Spring Security 5 和 Spring Boot 2 起,部分功能已整合进核心模块),你可以快速搭建OAuth2客户端或资源服务器,支持授权码模式、密码模式、客户端凭证等常见流程。

1. 添加依赖(Maven)

使用Spring Boot项目时,在pom.xml中添加以下关键依赖:


    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.boot
        spring-boot-starter-security
    
    
        org.springframework.security
        spring-security-oauth2-client
    
    
        org.springframework.security
        spring-security-oauth2-jose
    

如果你要构建的是资源服务器(Resource Server),还需加入 spring-security-oauth2-resource-server 模块。

2. 配置OAuth2客户端(以GitHub登录为例)

application.yml 中配置第三方OAuth2服务信息:

立即学习Java免费学习笔记(深入)”;

spring:
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: your-github-client-id
            client-secret: your-github-client-secret
            scope: user
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
            authorization-grant-type: authorization_code
        provider:
          github:
            authorization-uri: https://github.com/login/oauth/authorize
            token-uri: https://github.com/login/oauth/access_token
            user-info-uri: https://api.github.com/user
            user-name-attribute: login

上述配置定义了与GitHub的OAuth2集成,使用授权码模式完成用户登录。

3. 启用Web安全配置

创建一个配置类,启用Spring Security并设置OAuth2登录:

唱鸭
唱鸭

音乐创作全流程的AI自动作曲工具,集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

下载
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(authz -> authz
                .requestMatchers("/", "/login**", "/error**").permitAll()
                .anyRequest().authenticated()
            )
            .oauth2Login(oauth2 -> oauth2
                .defaultSuccessUrl("/home")
            )
            .logout(logout -> logout
                .logoutSuccessUrl("/").permitAll()
            );
        return http.build();
    }
}

这段代码的作用是:

  • 允许访问首页和登录相关路径无需认证
  • 开启OAuth2登录,成功后跳转到 /home
  • 配置登出行为

4. 创建简单页面测试登录

添加一个控制器返回登录链接:

@Controller
public class HomeController {

    @GetMapping("/")
    public String index() {
        return "index";
    }

    @GetMapping("/home")
    public String home(Model model, OAuth2AuthenticationToken token) {
        if (token != null) {
            model.addAttribute("name", token.getPrincipal().getAttribute("name"));
        }
        return "home";
    }
}

对应的 Thymeleaf 模板 index.html

Login with GitHub

点击该链接会跳转到GitHub进行授权,授权后回调应用完成登录。

5. 资源服务器(Resource Server)配置示例

如果你想保护API接口,验证JWT格式的OAuth2令牌,可配置为资源服务器:

@Bean
public SecurityFilterChain resourceServerFilterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests(authz -> authz
            .requestMatchers("/public").permitAll()
            .anyRequest().authenticated()
        )
        .oauth2ResourceServer(oauth2 -> oauth2
            .jwt(jwt -> jwt.jwtAuthenticationConverter(myConverter()))
        );
    return http.build();
}

同时在配置文件中指定JWK Set URI(用于验证JWT签名):

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          jwk-set-uri: https://your-auth-server/.well-known/jwks.json
总结 Java中使用Spring Security集成OAuth2,核心在于正确配置客户端注册信息和安全链。对于第三方登录,主要使用 oauth2Login();对于保护API,则启用 oauth2ResourceServer() 并解析JWT。整个流程标准化程度高,扩展性强,适合对接Google、GitHub、微信钉钉等平台。 基本上就这些。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

805

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

724

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

727

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

395

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

445

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

428

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16861

2023.08.03

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.1万人学习

C# 教程
C# 教程

共94课时 | 5.7万人学习

Java 教程
Java 教程

共578课时 | 39.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号