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

部署Jumbojett OpenID Connect时遇Unable to verify JWT claims错误求助

Jumbojett OpenID认证服务器端JWT验证失败排查

问题场景

本地开发环境运行正常,但部署到服务器后持续抛出以下异常:

捕获到未处理异常
类型: Jumbojett\OpenIDConnectClientException
信息: Unable to verify JWT claims
文件名: /var/www/html/vendor/jumbojett/openid-connect-php/src/OpenIDConnectClient.php
行号: 373
回溯信息:
文件: /var/www/html/application/controllers/Welcome.php
行号: 56
方法: authenticate
文件: /var/www/html/index.php
行号: 315
方法: require_once

认证代码

$oidc = new OpenIDConnectClient(
                $this->config->item('SSO_PROVIDER_URL'),
                $this->config->item('SSO_CLIENT_ID'),
                $this->config->item('SSO_CLIENT_SECRET')
            );
$oidc->setVerifyHost(false);    //dev only
$oidc->setVerifyPeer(false);    //dev only
$oidc->setHttpUpgradeInsecureRequests(false);   //dev only
$isAuthenticate = $oidc->authenticate();

配置项(已脱敏)

$config['SSO_PROVIDER_URL'] = 'https://auth.****.**.id/auth/realms/***ura-**st';
$config['SSO_CLIENT_ID'] = '***ola-****';
$config['SSO_CLIENT_SECRET'] = '********************************';

可能的原因及解决方法

  • 服务器时间与IDP时间偏差过大
    JWT的exp(过期时间)和nbf(生效时间)验证对时间敏感,若服务器本地时间和身份提供商(IDP)服务器时间差超过5分钟,就会触发验证失败。
    解决:同步服务器时间到NTP服务器,比如CentOS执行chronyc makestep,Ubuntu执行timedatectl set-ntp true。

  • IDP的JWKS端点无法访问
    库会自动从IDP的well-known端点获取JWKS密钥验证JWT签名,服务器可能因防火墙、代理限制无法访问该端点。
    解决:

    1. 手动访问你的IDP_URL/.well-known/openid-configuration,确认jwks_uri字段存在且可访问;
    2. 在服务器上用curl测试:curl https://auth.****.**.id/auth/realms/***ura-**st/protocol/openid-connect/certs(替换成实际jwks地址),检查是否返回JSON格式密钥;
    3. 若有代理,给客户端设置代理:$oidc->setProxy('http://你的代理地址:端口');。
  • 受众(Audience)验证不匹配
    JWT的aud字段必须包含你的SSO_CLIENT_ID,若IDP配置的受众与客户端ID不一致,会导致验证失败。
    解决:

    1. 检查IDP后台客户端配置,确认Valid Audiences包含你的SSO_CLIENT_ID;
    2. 代码中手动指定受众:$oidc->setAudience($this->config->item('SSO_CLIENT_ID'));。
  • 签名算法不匹配
    IDP签名JWT使用的算法与库预期不一致(比如IDP用RS256但库默认用HS256),会导致验证失败。
    解决:

    1. 查看IDP的openid-configuration里的id_token_signing_alg_values_supported字段,确认签名算法;
    2. 代码中手动设置算法:$oidc->setSigningAlgorithm('RS256');(替换为实际算法)。
  • SSL证书相关隐藏问题
    即使禁用了证书验证,服务器CA证书过期或不完整也可能导致无法获取JWKS。
    解决:

    1. 更新服务器CA证书包,CentOS执行yum update ca-certificates,Ubuntu执行update-ca-certificates;
    2. 开启调试模式查看详细错误:$oidc->setDebug(true);,根据输出定位具体验证失败步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:09:56