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
相关产品推荐
相关产品推荐

