You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Authorization Server 1.0.1能否使用oidcClientRegistrationEndpoint?

Spring Authorization Server 1.0.1 与 OIDC客户端注册端点问题

核心结论

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:33:23