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

SpringBoot3升级后集成Okta OAuth2认证出现本地404错误

SpringBoot3 + SpringSecurity6集成Okta出现404问题排查与解决

问题背景

将Java Web应用从SpringBoot2升级至SpringBoot3,同步升级SpringSecurity到6版本,集成Okta身份认证时,访问localhost:8081后重定向到Okta出现404错误,重定向URL为https://dev-xxxx.okta.com/oauth2/default?response_type=code&client_id=xxx&scope=openid,profile,email&state=23DFGHYTRDX&redirect_uri=/search。

现有配置

配置文件

oauth2.authUri=https://dev-xxx.okta.com/oauth2/default/v1/authorize
oauth2.accessTokenUri=https://dev-xxx.okta.com/oauth2/default/v1/token
oauth2.userInfoUri=https://dev-xxx.okta.com/oauth2/v1/userInfo
oauth2.redirect_uri=http://localhost:8081/search
oauth2.clientId=xxx
oauth2.clientSecret=xxx
oauth2.scope=openid,profile,email
oauth2.authenticationScheme=header

ClientRegistrationRepository代码

@Bean
public ClientRegistrationRepository clientRegistrationRepository() {
    ClientRegistration clientRegistration = ClientRegistration.withRegistrationId("okta")
            .clientId(clientId)
            .clientSecret(clientSecret)
            .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
            .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
            .redirectUri(redirectUri)
            .scope(scope)
            .authorizationUri(authUri)
            .tokenUri(accessTokenUri)
            .userNameAttributeName("id")
            .build();

    return new InMemoryClientRegistrationRepository(clientRegistration);
}

问题排查与解决方案

1. 授权端点路径缺失(核心原因)

重定向URL仅到https://dev-xxxx.okta.com/oauth2/default,未包含配置的/v1/authorize路径,导致Okta端无对应资源返回404。

  • 检查authUri变量是否正确读取配置文件中的值,确认ClientRegistration构建时authorizationUri(authUri)传入的是完整的https://dev-xxx.okta.com/oauth2/default/v1/authorize。
  • 可通过Okta开发者控制台的授权服务器->default->元数据,确认官方提供的authorization_endpoint与配置值一致。

2. 缺少SpringSecurity6的FilterChain配置

SpringSecurity6废弃了WebSecurityConfigurerAdapter,必须配置SecurityFilterChain来启用OAuth2登录逻辑,否则框架无法处理重定向流程:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests(auth -> auth
            .anyRequest().authenticated() // 所有请求需认证
        )
        .oauth2Login(oauth2 -> oauth2
            .clientRegistrationRepository(clientRegistrationRepository())
        );
    return http.build();
}

3. 重定向URI一致性校验

  • 确保Okta应用配置中的重定向URI与代码中redirectUri完全一致(包括协议、端口、路径),即http://localhost:8081/search必须在Okta的应用重定向URI列表中。
  • 若使用自定义回调路径,需确认该路径未被Spring Security拦截,或在FilterChain中配置允许访问(不过OAuth2回调逻辑通常由Spring Security自动处理,无需额外Controller)。

4. 修正用户属性名称

Okta的用户唯一标识属性为sub,而非id,虽不影响当前404问题,但会导致后续获取用户信息异常,建议修改:

.userNameAttributeName(IdTokenClaimNames.SUB) // 或直接写"sub"

内容的提问来源于stack exchange,提问作者Dimuthu A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:43:15