WSO2 APIM 3.2配置:仅通过Keycloak OAuth2令牌访问API的方法
WSO2 APIM 3.2 仅用Keycloak令牌访问API的配置方案
问题原因
你遇到的900908错误是因为WSO2 APIM默认强制验证API的订阅关系——要求请求携带API密钥或WSO2颁发的令牌来确认调用方(应用)已订阅该API。而你当前使用的Keycloak令牌仅完成了用户身份认证,未关联WSO2的API订阅逻辑,因此被拦截。
配置步骤
要实现仅用Keycloak令牌访问API,需完成以下配置:
1. 将Keycloak配置为WSO2的身份提供者
在WSO2 APIM管理控制台中添加Keycloak作为OpenID Connect身份提供者:
- 进入身份 > 身份提供者 > 添加,选择
OpenID Connect类型 - 配置Keycloak的客户端ID、客户端密钥,填写令牌端点(如
https://<keycloak-domain>/auth/realms/<realm-name>/protocol/openid-connect/token)和用户信息端点 - 启用
启用OAuth2/OpenID Connect,保存配置后,确保WSO2能成功验证Keycloak令牌的签名和有效性
2. 修改API的安全策略
在API发布者控制台编辑目标API:
- 切换到安全选项卡,将API的安全类型从默认的
API Key或OAuth2改为OpenID Connect - 选择之前配置的Keycloak身份提供者作为验证源
3. 关闭API订阅验证
要跳过WSO2的订阅检查,需修改全局配置:
打开<APIM_HOME>/repository/conf/deployment.toml,添加以下配置:
[apim.devportal] disable_subscription_validation = true
4. 配置API访问权限
在API发布者的策略选项卡中,设置API的访问权限为允许所有已认证用户,确保通过Keycloak认证的用户都能访问该API
5. 验证配置
重启WSO2 APIM服务后,用Angular应用携带Keycloak的access_token调用API,确认不再返回900908错误
方案合理性与最佳实践
合理性
如果你的场景是内部可信系统,无需按应用维度统计API调用、设置限流/配额,且所有终端用户都已通过Keycloak完成身份认证,该方案是可行的。
潜在风险
- 跳过订阅验证后,WSO2无法跟踪API的应用级调用来源,无法实现应用维度的权限隔离、流量管控
- 若Keycloak令牌泄露,攻击者可直接调用API,缺少应用层面的额外防护
最佳实践建议
- 若需要保留应用管控能力,建议采用Keycloak令牌+API密钥的组合方案:将API安全类型设为
OAuth2 + API Key,OAuth2身份提供者选Keycloak,同时验证用户身份和应用订阅 - 若必须仅用用户令牌,建议在Keycloak中为不同Angular应用配置独立客户端,在WSO2中通过令牌的
aud(受众)字段限制仅指定客户端的令牌可访问API,同时开启WSO2的用户权限细粒度控制
内容的提问来源于stack exchange,提问作者Mael
相关产品推荐
相关产品推荐

