WSO2 APIM使用Keycloak授权码模式令牌调用API报900908错误如何解决
WSO2 APIM 900908错误排查与解决方案
错误本质
返回码
900908是WSO2 APIM的标准订阅校验失败错误,代表你从Keycloak获取的Access Token携带的客户端、用户信息,无法匹配到WSO2侧目标API的订阅关系。
排查步骤
- 校验Keycloak令牌的客户端映射配置
用JWT解码工具解析你拿到的Access Token,确认令牌载荷中的client_id字段值为angular-app,且该客户端ID已经被添加到WSO2侧Keycloak密钥管理器的允许的客户端列表中。多数场景下该错误是因为配置外部密钥管理器时,仅添加了密钥管理器自身的客户端IDapim-client,遗漏了业务侧客户端angular-app。
同时确认令牌aud(受众)字段包含你调用API的对应受众值,或WSO2侧已开启跳过受众校验配置。 - 校验WSO2侧订阅匹配规则
WSO2默认使用令牌中的client_id匹配内部应用订阅关系,二选一配置即可:- 在WSO2开发者门户创建一个与Keycloak客户端ID完全同名的
angular-app应用,用该应用订阅你需要调用的API - 无需订阅管控的场景下,进入WSO2管理控制台的Keycloak密钥管理器编辑页,勾选
Skip Subscription Validation(跳过订阅校验)选项保存即可
- 在WSO2开发者门户创建一个与Keycloak客户端ID完全同名的
- 校验角色权限配置
如果你调用的API开启了RBAC角色访问控制,解码令牌确认realm_access.roles字段中包含API绑定的允许访问的角色名,同时确认WSO2侧Keycloak密钥管理器的角色声明提取路径配置为realm_access.roles。 - 清除WSO2缓存验证
修改配置后未生效的情况,可进入WSO2管理控制台密钥管理器配置页点击清除缓存,或重启网关节点,避免旧配置缓存影响校验结果。
临时验证方案
如果要快速确认是否为订阅逻辑导致的问题,可在WSO2安装目录下的repository/conf/deployment.toml添加如下配置,全局关闭订阅校验:
[apim.oauth_config] enable_subscription_validation = false
重启网关后如果API调用成功,即可确认是订阅匹配问题,再按需选择上面的订阅配置方案即可。
内容的提问来源于stack exchange,提问作者Oumayma Bendhief
相关产品推荐
相关产品推荐

