概述
这个类来自 org.springframework.boot.autoconfigure.security.oauth2.server.servlet
包,是 Spring Boot 自动配置 OAuth2 授权服务器的核心类。
类结构分析
类注解
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties({OAuth2AuthorizationServerProperties.class})
-
@Configuration
标记这是一个配置类,proxyBeanMethods = false
表示不代理Bean方法以提高性能 -
@EnableConfigurationProperties
启用对OAuth2AuthorizationServerProperties
的配置属性支持
成员变量
private final OAuth2AuthorizationServerPropertiesMapper propertiesMapper;
-
使用
OAuth2AuthorizationServerPropertiesMapper
将配置属性映射为授权服务器所需的对象
构造函数
OAuth2AuthorizationServerConfiguration(OAuth2AuthorizationServerProperties properties) {
this.propertiesMapper = new OAuth2AuthorizationServerPropertiesMapper(properties);
}
-
通过依赖注入接收
OAuth2AuthorizationServerProperties
配置属性 -
创建属性映射器实例
核心Bean定义
1. RegisteredClientRepository Bean
@Bean
@ConditionalOnMissingBean
@Conditional({RegisteredClientsConfiguredCondition.class})
RegisteredClientRepository registeredClientRepository() {
return new InMemoryRegisteredClientRepository(this.propertiesMapper.asRegisteredClients());
}
-
作用:提供客户端注册信息的存储仓库
-
条件:
-
@ConditionalOnMissingBean
:当没有其他RegisteredClientRepository
Bean存在时才创建 -
@Conditional({RegisteredClientsConfiguredCondition.class})
:只有当配置了注册客户端时才创建
-
-
实现:使用内存存储 (
InMemoryRegisteredClientRepository
),适合开发和测试环境
2. AuthorizationServerSettings Bean
@Bean
@ConditionalOnMissingBean
AuthorizationServerSettings authorizationServerSettings() {
return this.propertiesMapper.asAuthorizationServerSettings();
}
-
作用:配置授权服务器的基本设置
-
条件:
@ConditionalOnMissingBean
确保没有自定义设置时才使用自动配置 -
来源:从配置属性映射而来
应用场景
典型使用场景
-
快速启动授权服务器:只需添加相关依赖和基本配置即可获得功能完整的OAuth2授权服务器
-
开发测试环境:内存存储非常适合开发和测试
-
原型开发:快速验证OAuth2流程
配置示例
在 application.yml
中配置:
spring:
security:
oauth2:
authorization-server:
issuer-url: http://localhost:9000
client:
my-client:
registration:
client-id: my-client
client-secret: secret
client-authentication-methods:
- client_secret_basic
authorization-grant-types:
- authorization_code
- refresh_token
redirect-uris:
- http://127.0.0.1:8080/login/oauth2/code/my-client
scopes:
- read
- write
生产环境建议
-
替换内存存储:实现基于数据库的
RegisteredClientRepository
-
自定义配置:覆盖自动配置以满足特定需求
-
安全加固:配置适当的客户端认证方式和密钥管理
扩展点
可以通过以下方式扩展或覆盖自动配置:
-
提供自己的
RegisteredClientRepository
Bean -
提供自定义的
AuthorizationServerSettings
Bean -
通过
OAuth2AuthorizationServerProperties
进行详细配置
这个自动配置类为快速启动OAuth2授权服务器提供了便利,但在生产环境中通常需要根据实际需求进行定制和扩展。