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

Spring Authorization Server获取Access Token报错:客户端认证失败

问题分析与解决方案

核心错误点

  1. 授权类型拼写错误
    你写的grant_type:client_credential少了末尾的s,标准的Client Credentials授权类型应为client_credentials,拼写错误会导致服务器无法识别授权模式,触发认证失败。

  2. 客户端认证方式完全错误
    Client Credentials模式下,客户端身份认证需要使用客户端自身的凭证(client_id和client_secret),而非普通用户的账号密码。你当前用Basic认证传递user/password,服务器无法匹配客户端凭证,直接报错。

  3. 客户端配置可能缺失必要项
    需确保Authorization Server中客户端oidc-client的配置包含:

    • 允许client_credentials授权类型
    • 启用对应的客户端认证方式(如client_secret_basic或client_secret_post)

修复步骤

1. 修正请求参数

把请求负载中的grant_type改为正确值:

grant_type:client_credentials

2. 修正认证方式(二选一)

  • 方式一:使用Basic认证传递客户端凭证
    去掉请求体中的client_id和client_secret,将Basic认证的用户名设为oidc-client,密码设为secret,请求体仅保留grant_type=client_credentials。

  • 方式二:在请求体中传递客户端凭证
    若你的客户端配置允许client_secret_post认证方式,可不用Basic认证,直接在请求体中传递完整参数:

    grant_type:client_credentials
    client_id:oidc-client
    client_secret:secret
    

3. 验证客户端配置

检查Authorization Server的客户端配置代码,确保包含以下关键项(以快速开始示例为例):

@Bean
public RegisteredClientRepository registeredClientRepository() {
    RegisteredClient oidcClient = RegisteredClient.withId(UUID.randomUUID().toString())
            .clientId("oidc-client")
            .clientSecret("{noop}secret") // 快速开始中使用明文(noop),生产环境需替换为加密密码
            .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC) // 启用Basic认证方式
            .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS) // 允许Client Credentials授权
            .scope(OidcScopes.OPENID)
            .build();

    return new InMemoryRegisteredClientRepository(oidcClient);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:52:11