WSO2 APIM集群APIKeyValidator返回900900错误求助
根据你描述的场景——APIM集群共享部署目录、调用API时token和订阅验证通过但scope验证失败,且日志显示资源路径有重复版本号,核心问题应该是重复的版本号干扰了APIM对租户域的识别逻辑,进而触发了Invalid tenant domain null错误。以下是具体的解决步骤:
检查并修正API的上下文与版本配置
登录APIM Publisher控制台,找到你发布的测试API,查看它的「Context」和「Version」设置。如果你的Context配置成了/myapi/3.0.0,同时Version又设为3.0.0,发布后就会出现/apis/myapi/3.0.0/3.0.0/info这种重复版本号的路径。正确的配置应该是Context设为/myapi,Version设为3.0.0,这样资源路径会变成正常的/apis/myapi/3.0.0/info。清理共享部署目录中的旧API artifacts
由于两个APIM节点共享<APIM_HOME>/repository/deployment/server目录,之前错误配置的API文件可能残留并影响节点加载。先停止所有APIM节点,然后:- 删除
<APIM_HOME>/repository/deployment/server/synapse-configs/default/api下对应测试API的XML文件 - 清理
<APIM_HOME>/repository/deployment/server/carbonapps里的相关CAR文件
重启节点后,重新发布修正配置后的API。
- 删除
验证Apache反向代理的路径转发规则
检查Apache的配置文件(比如虚拟主机配置或httpd.conf),确保ProxyPass规则没有额外拼接版本号,让请求的原始路径完整传递到APIM节点。比如正确的转发规则应该是:ProxyPass /apis http://your-apim-cluster-address:8280/apis retry=0 ProxyPassReverse /apis http://your-apim-cluster-address:8280/apis避免在转发时手动添加版本信息,交给APIM自身处理路径映射。
确认Scope的租户关联正确性
虽然日志显示匹配到了scope,但租户域为null,可能是scope的租户关联存在问题。登录APIM Admin控制台,进入Main > Identity > Scopes,找到对应的scope,检查它的租户域是否和API所在租户一致。如果是自定义scope,建议重新创建并关联到正确租户后,重新订阅API并生成新的token进行测试。调试验证修复效果
修复配置后,重新开启OAuth2调试日志(修改<APIM_HOME>/repository/conf/log4j2.properties,设置logger.org.wso2.carbon.identity.oauth2.level = DEBUG),再次调用API。确认日志中资源路径不再重复,且tenantDomain字段能正确显示租户信息,scope验证流程正常完成。
内容的提问来源于stack exchange,提问作者ChelloFera

