Spring Authorization Server 1.0.1能否使用oidcClientRegistrationEndpoint?
核心结论
Spring Authorization Server 1.0.1版本不支持OIDC动态客户端注册端点(/connect/register),该功能是在2.0.0版本才正式引入的。你配置oidcClientRegistrationEndpoint后收到“未找到”错误,正是因为1.0.x版本的框架本身没有实现这个端点逻辑。
解决方案与示例
如果需要使用OIDC动态客户端注册功能,你需要将Spring Authorization Server升级到2.0.0及以上版本,以下是基础配置示例:
1. 升级依赖
确保项目依赖使用2.0+版本的Spring Authorization Server:
<!-- Maven示例 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-authorization-server</artifactId> <version>2.0.0</version> </dependency>
2. 配置授权服务器与客户端存储
在2.0+版本中可正常配置oidcClientRegistrationEndpoint,同时需要配置RegisteredClientRepository用于存储动态注册的客户端:
@Bean public AuthorizationServerSettings authorizationServerSettings() { return AuthorizationServerSettings.builder() .issuer("http://localhost:9000") .authorizationEndpoint("/oauth2/authorize") .tokenEndpoint("/oauth2/token") .tokenIntrospectionEndpoint("/oauth2/introspect") .tokenRevocationEndpoint("/oauth2/revoke") .jwkSetEndpoint("/oauth2/jwks") .oidcUserInfoEndpoint("/userinfo") .oidcClientRegistrationEndpoint("/connect/register") .build(); } // 内存版客户端存储(生产环境建议替换为持久化实现,比如基于数据库) @Bean public RegisteredClientRepository registeredClientRepository() { RegisteredClient initialClient = RegisteredClient.withId(UUID.randomUUID().toString()) .clientId("initial-static-client") .clientSecret("{noop}static-secret") .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC) .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) .authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN) .redirectUri("http://localhost:8080/login/oauth2/code/initial-client") .scope(OidcScopes.OPENID) .scope(OidcScopes.PROFILE) .clientSettings(ClientSettings.builder().requireAuthorizationConsent(true).build()) .build(); return new InMemoryRegisteredClientRepository(initialClient); }
3. 配置端点访问权限
在Spring Security配置中启用OIDC相关功能并开放端点权限:
@Bean public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception { OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http); // 启用OIDC模块,包含动态客户端注册端点 http.getConfigurer(OAuth2AuthorizationServerConfigurer.class) .oidc(Customizer.withDefaults()); http.exceptionHandling(exceptions -> exceptions .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login"))); return http.build(); }
补充说明
- 1.0.x版本仅支持静态配置客户端,无法通过OIDC动态注册端点创建或修改客户端。
- 升级到2.0+版本后,可基于上述示例扩展自定义逻辑,比如添加客户端注册时的参数校验、客户端信息持久化等。
内容的提问来源于stack exchange,提问作者Willy De Keyser
相关产品推荐
相关产品推荐

