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

Spring Security OAuth2授权服务器/oauth2/token端点返回404未找到问题求助

问题分析与解决方案

你的核心问题是使用GET请求访问/oauth2/token端点,而Spring Security OAuth2授权服务器的该端点默认仅支持POST请求,这直接导致了404错误。除此之外,还有客户端认证方式的配置细节需要调整,以下是具体的分析和修复步骤:

1. 必须使用POST请求获取Access Token

/oauth2/token是OAuth2规范定义的令牌端点,Spring Security OAuth2授权服务器严格遵循规范,仅接受POST请求(表单格式参数)。你当前用GET请求传递参数,服务器无法匹配到对应的端点处理逻辑,因此返回404。

正确的请求示例(以curl为例)

curl -X POST http://127.0.0.1:8080/oauth2/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  # 你的客户端配置了CLIENT_SECRET_BASIC,因此使用HTTP Basic认证头传递凭证
  -u client:password \
  -d "grant_type=authorization_code" \
  -d "code=YOUR_AUTHORIZATION_CODE" \
  -d "redirect_uri=http://127.0.0.1:4200/authorized" \
  -d "code_verifier=YOUR_CODE_VERIFIER"

2. 客户端认证方式的补充配置

你的客户端当前只配置了CLIENT_SECRET_BASIC认证方式,这意味着只能通过HTTP Basic认证头传递客户端凭证。如果希望支持通过表单参数(client_id和client_secret)传递凭证,需要在客户端配置中添加CLIENT_SECRET_POST认证方式:

RegisteredClient client = RegisteredClient.withId(UUID.randomUUID().toString())
        .clientId("client")
        .clientSecret(passwordEncoder.encode("password"))
        .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
        .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_POST) // 新增该行
        .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
        .authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN)
        .redirectUri("http://127.0.0.1:4200/authorized")
        .scope(OidcScopes.OPENID)
        .scope("read")
        .scope("write")
        .build();

3. 其他需要注意的细节

  • redirect_uri必须完全匹配:获取token时的redirect_uri必须和获取授权码时使用的redirect_uri完全一致,不能有任何差异(比如结尾斜杠、域名大小写等)。
  • 避免重复创建客户端:你当前的registeredClientRepository方法每次启动都会查询并保存客户端,可能导致数据库中出现重复记录。建议使用UUID.randomUUID().toString()生成客户端ID(替代自定义的UserIdGenerator.generateClientId()),并确保仅在客户端不存在时执行保存逻辑(你的代码已经实现了这一点)。
  • 过滤器链顺序正确:你的AuthorizationServerConfig中的SecurityFilterChain设置了@Order(Ordered.HIGHEST_PRECEDENCE),这是正确的,确保授权服务器的端点优先被处理,不会被DefaultSecurityConfig的过滤器链拦截。

内容的提问来源于stack exchange,提问作者Mukendi Emmanuel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:37:29