返回

SpringBoot3.1.3 无痛对接 Spring Security OAuth2 授权服务器

后端

从零开始:SpringBoot 3.1.3 集成 Spring Security OAuth2 授权服务器

引言

在现代分布式系统中,安全可靠的身份验证和授权机制至关重要。Spring Security OAuth2 授权服务器提供了一套强大且灵活的解决方案,可满足这些要求。本文将深入探讨如何在 SpringBoot 3.1.3 项目中集成 Spring Security OAuth2,手把手指导您完成每个步骤。

步骤一:准备工作

1. 先决条件

  • Java Development Kit (JDK) 11 或更高版本
  • Spring Boot 3.1.3
  • Spring Security OAuth2 授权服务器

2. 项目创建

使用 Spring Boot CLI 创建一个新的 SpringBoot 项目:

spring init oauth2-authorization-server --java=11 --build=maven

步骤二:配置项目

1. 依赖项添加

在项目 pom.xml 文件中添加以下依赖项:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.security.oauth2</groupId>
  <artifactId>spring-security-oauth2-authorization-server</artifactId>
</dependency>

2. 配置属性

application.properties 文件中添加以下配置:

spring.security.oauth2.authorization.check-token-access=permitAll()
spring.security.oauth2.authorization.token.signature-verifier=public_key

3. 公私钥生成

resources/keys 文件夹中生成公钥和私钥:

keytool -genkey -alias public_key -keyalg RSA -keysize 2048 -keystore keystore.jks -storepass password

步骤三:编写代码

1. AuthorizationServerConfig

创建 AuthorizationServerConfig 类来配置授权服务器:

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig {

  @Bean
  public AuthorizationServerEndpointsConfigurer endpointsConfigurer(TokenEnhancer tokenEnhancer) {
    return endpointsConfigurer()
      .tokenEnhancer(tokenEnhancer)
      .authorizationCodeServices(new InMemoryAuthorizationCodeServices());
  }

  @Bean
  public TokenEnhancer tokenEnhancer() {
    return new CustomTokenEnhancer();
  }

}

2. CustomTokenEnhancer

创建 CustomTokenEnhancer 类来增强令牌:

public class CustomTokenEnhancer implements TokenEnhancer {

  @Override
  public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
    Map<String, Object> additionalInfo = new HashMap<>();
    additionalInfo.put("custom_field", "custom_value");
    ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
    return accessToken;
  }

}

步骤四:运行项目

1. 启动项目

使用以下命令启动 SpringBoot 项目:

mvn spring-boot:run

2. 授权和获取令牌

  • 访问 http://localhost:8080/oauth2/authorize 授权
  • 访问 http://localhost:8080/oauth2/token 获取令牌

常见问题解答

1. 如何配置自定义授权范围?

可以在 AuthorizationServerEndpointsConfigurer 类中使用 withAuthorizationCodeGrant 方法自定义授权范围。

2. 如何启用资源服务器?

可以在 SecurityConfig 类中配置 ResourceServerConfigurerAdapter 以启用资源服务器。

3. 如何配置多客户端?

可以使用 InMemoryClientDetailsServiceJdbcClientDetailsService 根据需要配置多个客户端。

4. 如何定制令牌签名密钥?

可以通过实现 KeyGenerator 接口并将其注入 AuthorizationServerEndpointsConfigurer 来定制令牌签名密钥。

5. 如何配置重定向 URI?

可以在 InMemoryAuthorizationCodeServices 中配置重定向 URI,也可以使用 JdbcAuthorizationCodeServices 从数据库中管理重定向 URI。

总结

通过本文的详细指南,您已经掌握了如何在 SpringBoot 3.1.3 项目中集成 Spring Security OAuth2 授权服务器。这将使您能够实现安全可靠的身份验证和授权机制,确保您的分布式系统免受未经授权的访问。