WSO2 APIM通过Keycloak Introspect验证令牌返回900901无效凭证
问题分析与解决思路
核心问题
在WSO2 APIM集成Keycloak作为密钥管理器时,令牌自省(Introspect)验证返回900901“无效凭证”,调整声明映射配置后出现“未分类认证失败”,但JWT自验证功能正常。
排查与解决步骤
校验Keycloak自省端点权限与可用性
- 确认WSO2 APIM使用的Keycloak客户端已开启
Allow Introspection权限,或在客户端Scope中添加了introspect权限 - 用curl直接测试Keycloak自省端点,验证凭证与令牌有效性:
curl -X POST https://<keycloak域名>/realms/<领域名>/protocol/openid-connect/token/introspect \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id=<APIM配置的客户端ID>&client_secret=<APIM配置的客户端密钥>&token=<待校验的access_token>" - 若curl返回包含
active: true的正常结果,说明Keycloak端配置无问题,问题出在WSO2 APIM的映射或校验逻辑。
- 确认WSO2 APIM使用的Keycloak客户端已开启
简化WSO2 APIM声明映射配置
- 移除
azp、iss的正则匹配规则:这类正则易因格式不匹配触发校验失败,先仅保留active声明映射——Claim Key设为active,Claim Value设为字符串true(注意大小写) - 用户名声明映射直接填写Keycloak返回的对应字段(通常是
preferred_username或sub),无需额外正则。
- 移除
调整WSO2 APIM密钥管理器自省配置
- 确认Introspection Endpoint格式正确:
https://<keycloak域名>/realms/<领域名>/protocol/openid-connect/token/introspect - 勾选Use Basic Auth for Introspection,确保WSO2 APIM用正确的客户端凭证调用自省端点
- 查看WSO2 APIM的
repository/logs/wso2carbon.log,定位“未分类认证失败”的堆栈跟踪,明确具体失败环节(如声明匹配错误、证书不信任等)
- 确认Introspection Endpoint格式正确:
验证令牌本身有效性
- 确保用于自省的是Keycloak颁发的
access_token,而非id_token(id_token通常不支持自省) - 检查令牌是否过期或已在Keycloak中被吊销
- 确保用于自省的是Keycloak颁发的
关键注意事项
- WSO2 APIM的声明映射对大小写敏感,需与Keycloak自省响应中的字段名完全一致
- 若Keycloak启用HTTPS,需将其SSL证书导入WSO2 APIM的信任库,避免因证书不信任导致请求失败
内容的提问来源于stack exchange,提问作者muhammad nagah
相关产品推荐
相关产品推荐

