SpringBoot 如何使用 OAuth2 进行认证和授权

这篇具有很好参考价值的文章主要介绍了SpringBoot 如何使用 OAuth2 进行认证和授权。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot 如何使用 OAuth2 进行认证和授权

OAuth2 是一种授权框架,可以用于实现第三方应用程序访问用户资源的安全性。在 SpringBoot 中,我们可以使用 Spring Security 和 Spring OAuth2 来实现 OAuth2 的认证和授权功能。本文将介绍如何在 SpringBoot 中使用 OAuth2 进行认证和授权。

OAuth2 的基本概念

在开始介绍如何使用 OAuth2 进行认证和授权之前,先让我们了解一下 OAuth2 的基本概念。

客户端(Client)

客户端是指需要访问用户资源的应用程序,例如网站、移动应用程序等。

资源所有者(Resource Owner)

资源所有者是指拥有用户资源的用户。

授权服务器(Authorization Server)

授权服务器是指用于管理用户授权的服务器,它负责验证客户端的身份,并向客户端提供访问令牌。

资源服务器(Resource Server)

资源服务器是指存储用户资源的服务器,它负责验证访问令牌,并向客户端提供用户资源。

访问令牌(Access Token)

访问令牌是客户端用于访问用户资源的令牌,由授权服务器颁发。

刷新令牌(Refresh Token)

刷新令牌用于更新访问令牌,以便客户端可以继续访问用户资源。

授权范围(Scope)

授权范围是指客户端请求访问用户资源的权限。

Spring Security 和 Spring OAuth2

Spring Security 是一个基于 Spring 的安全框架,它提供了身份验证和授权的功能。Spring OAuth2 是在 Spring Security 基础上实现的 OAuth2 的认证和授权功能。

Spring OAuth2 提供了以下几个核心组件:

  • Authorization Server:用于管理用户授权的服务器。
  • Resource Server:存储用户资源的服务器。
  • Client:需要访问用户资源的应用程序。
  • Access Token:用于访问用户资源的令牌。

SpringBoot 中使用 OAuth2 进行认证和授权

在 SpringBoot 中,我们可以使用 Spring Security 和 Spring OAuth2 来实现 OAuth2 的认证和授权功能。下面我们将以一个简单的示例来介绍如何在 SpringBoot 中使用 OAuth2 进行认证和授权。

添加依赖

首先,在 pom.xml 文件中添加以下依赖:

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <!-- Spring Security OAuth2 -->
    <dependency>
        <groupId>org.springframework.security.oauth</groupId>
        <artifactId>spring-security-oauth2</artifactId>
        <version>2.3.7.RELEASE</version>
    </dependency>
</dependencies>

配置 Spring Security

在 SpringBoot 中,我们可以使用 Java Config 来配置 Spring Security。在 SecurityConfig.java 文件中添加以下配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
        authenticationProvider.setUserDetailsService(userDetailsService);
        authenticationProvider.setPasswordEncoder(passwordEncoder);
        return authenticationProvider;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authenticationProvider());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/oauth/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().permitAll()
                .and()
                .logout().permitAll()
                .and()
                .csrf().disable();

        // 配置 OAuth2 认证
        http.oauth2Login();
    }
}

在上面的代码中,我们首先配置了一个 DaoAuthenticationProvider,用于从数据库中获取用户信息并进行身份验证。然后在 configure(AuthenticationManagerBuilder auth) 方法中将 authenticationProvider() 注册到 AuthenticationManagerBuilder 中。接着在 configure(HttpSecurity http) 方法中配置了请求的授权,允许 /oauth/** 的请求不需要身份验证,其余请求需要进行身份验证。最后,我们使用 http.oauth2Login() 方法来启用 OAuth2 登录功能。

配置 OAuth2

在 SpringBoot 中配置 OAuth2,需要在 application.yml 文件中添加以下配置:

spring:
  security:
    oauth2:
      client:
        registration:
          custom-client:
            client-id: client-id
            client-secret: client-secret
            authorization-grant-type: authorization_code
            redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
            scope:
              - read
              - write
            client-name: Custom Client
        provider:
          custom-provider:
            authorization-uri: https://custom-provider.com/oauth/authorize
            token-uri: https://custom-provider.com/oauth/token
            user-info-uri: https://custom-provider.com/userinfo
            user-name-attribute: sub

在上面的配置中,我们配置了一个名为 custom-client 的 OAuth2 客户端,包括 client-idclient-secretauthorization-grant-typeredirect-uriscopeclient-name 等信息。同时,我们也配置了一个名为 custom-provider 的 OAuth2 服务提供商,包括 authorization-uritoken-uriuser-info-uriuser-name-attribute 等信息。

创建控制器

最后,我们需要创建一个控制器来处理 OAuth2 认证和授权相关的请求。在 OAuth2Controller.java 文件中添加以下代码:

@RestController
@RequestMapping("/oauth")
public class OAuth2Controller {

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

    @GetMapping("/user")
    public Principal user(Principal principal) {
        return principal;
    }
}

在上面的代码中,我们创建了两个方法,callback() 方法用于处理 OAuth2 的回调请求,user() 方法用于获取当前登录用户的信息。

测试 OAuth2 认证和授权

现在,我们已经完成了在 SpringBoot 中使用 OAuth2 进行认证和授权的配置。接下来,我们可以使用 Postman 或浏览器等工具来测试 OAuth2 的认证和授权功能。

首先,我们需要使用 https://custom-provider.com/oauth/authorize 访问 OAuth2 的授权页面,输入用户名和密码,进行授权操作。然后,我们将被重定向到 redirect-uri 指定的地址,例如 http://localhost:8080/login/oauth2/code/custom-client

在获取到授权码后,我们可以使用以下命令来获取访问令牌:

curl -X POST \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "grant_type=authorization_code&code=授权码&redirect_uri=http://localhost:8080/login/oauth2/code/custom-client&client_id=client-id&client_secret=client-secret" \
     https://custom-provider.com/oauth/token

在获取到访问令牌后,我们可以使用以下命令来访问受保护的资源:

curl -H "Authorization: Bearer 访问令牌" \
     https://custom-provider.com/userinfo

如果访问成功,将返回当前用户的信息。

总结

在本文中,我们介绍了如何在 SpringBoot 中使用 OAuth2 进行认证和授权。我们首先介绍了 OAuth2 的基本概念和 Spring Security 和 Spring OAuth2 的相关知识,然后详细讲解了在 SpringBoot 中如何配置 Spring Security 和 OAuth2,以及如何创建控制器来处理 OAuth2 相关请求。通过本文的讲解,相信读者已经掌握了在 SpringBoot 中使用 OAuth2 进行认证和授权的文章来源地址https://www.toymoban.com/news/detail-635982.html

到了这里,关于SpringBoot 如何使用 OAuth2 进行认证和授权的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot 基于 OAuth2 统一身份认证流程详解

    了解OAUTH2统一认证基本概念 了解OAUTH2协议流程 了解OAUTH2各种模式类型 了解Spring Security OAuth设计 2. 分析 传统登陆认证介绍 单点登陆认证介绍 OAuth2简介 OAuth2角色 OAuth2协议流程介绍 OAuth2授权类型 OAuth2授权码模式流程 OAuth2简化模式 OAuth2密码模式 OAuth2客户端模式 Spring Security

    2024年02月15日
    浏览(58)
  • 【Oauth2.0 单点登录 + 第三方授权认证】用户认证、授权模式

    本文主要对 SpringSecurity Oauth 2.0 用户认证,授权码授权模式、密码授权模式,以及授权流程进行讲解 开发中,有些功能只有管理员才有,普通用户是没有的。即需要对用户的身份进行认证,是管理员还是普通用户。认证方式有两种: 身份认证: 用户在访问相应资源时对用户

    2023年04月08日
    浏览(65)
  • 搭建spring security oauth2认证授权服务器

    下面是在spring security项目的基础上搭建spring security oauth2认证授权服务器 spring security oauth2认证授权服务器主要需要以下依赖 Spring Security对OAuth2默认可访问端点 ​/oauth/authorize​ ​​:申请授权码code,涉及类​ ​AuthorizationEndpoint​ ​ ​/oauth/token​ ​​:获取令牌token,涉及类​

    2024年01月21日
    浏览(57)
  • Spring Security—OAuth2 客户端认证和授权

    关于 JWT Bearer 客户端认证的进一步详情,请参考OAuth 2.0客户端认证和授权许可的 JSON Web Token (JWT)简介。 JWT Bearer 客户端认证的默认实现是  NimbusJwtClientAuthenticationParametersConverter ,它是一个  Converter ,通过在  client_assertion  参数中添加签名的JSON Web Token(JWS)来定制令牌请求

    2024年02月08日
    浏览(53)
  • Spring Boot OAuth2 认证服务器搭建及授权码认证演示

    本篇使用JDK版本是1.8,需要搭建一个OAuth 2.0的认证服务器,用于实现各个系统的单点登录。 这里选择Spring Boot+Spring Security + Spring Authorization Server 实现,具体的版本选择如下: Spirng Boot 2.7.14 , Spring Boot 目前的最新版本是 3.1.2,在官方的介绍中, Spring Boot 3.x 需要JDK 17及以上的

    2024年02月15日
    浏览(49)
  • SpringCloud整合spring security+ oauth2+Redis实现认证授权

    在微服务构建中,我们一般用一个父工程来通知管理依赖的各种版本号信息。父工程pom文件如下: 在SpringCloud微服务体系中服务注册中心是一个必要的存在,通过注册中心提供服务的注册和发现。具体细节可以查看我之前的博客,这里不再赘述。我们开始构建一个eureka注册中

    2024年02月06日
    浏览(58)
  • Spring Cloud Gateway 整合OAuth2.0 实现统一认证授权

    Spring Cloud Gateway 整合OAuth2.0 实现统一认证授权 GateWay——向其他服务传递参数数据 https://blog.csdn.net/qq_38322527/article/details/126530849 @EnableAuthorizationServer Oauth2ServerConfig 验证签名 网关服务需要RSA的公钥来验证签名是否合法,所以认证服务需要有个接口把公钥暴露出来 接下来搭建网

    2024年02月13日
    浏览(42)
  • oauth2.0第2季 分布式认证与授权实现单点登录

    1.使用jwttoken进行令牌传输,资源服务器在本地怎么验证token? 1.1.1 oauth是什么 1.1.2 oauth的角色 1.1.3 oauth的认证流程 1.1.4 oauth的4种模式 1.介绍单体架构  使用sesion保存会话信息的情况 2.前后端分离项目,调用方式 session架构不适合前后端分离项目 3.解决办法,引出oauth2.0 配置

    2024年02月11日
    浏览(45)
  • 授权码 + PKCE 模式|OIDC & OAuth2.0 认证协议最佳实践系列【03】

    ​ 在上一篇文章中,我们介绍了 OIDC 授权码模式(点击下方链接查看), 本次我们将重点围绕 授权码 + PKCE 模式(Authorization Code With PKCE)进行介绍 ,从而让你的系统快速具备接入用户认证的标准体系。 OIDC OAuth2.0 认证协议最佳实践系列 02 - 授权码模式(Authorization Code)接

    2024年02月01日
    浏览(92)
  • Gateway+Springsecurity+OAuth2.0+JWT 实现分布式统一认证授权!

    目录 1. OAuth2.0授权服务 2. 资源服务 3. Gateway网关 4. 测试   在SpringSecurity+OAuth2.0 搭建认证中心和资源服务中心-CSDN博客 ​​​​​​ 基础上整合网关和JWT实现分布式统一认证授权。   大致流程如下: 1、客户端发出请求给网关获取令牌 2、网关收到请求,直接转发给授权服务

    2024年01月24日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包