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

本地Docker容器中添加Keycloak作为WSO2 APIM密钥管理器时出错

问题:WSO2 APIM导入Keycloak Well-Known URL时遇内部错误

场景:Keycloak通过WSL(Ubuntu)在本地Docker容器运行,WSO2 APIM在独立本地Docker容器运行。尝试导入http://localhost:8080/realms/MyRealm/.well-known/openid-configuration作为密钥管理器的Well Known URL时,提示“服务器遇到内部错误,请联系管理员”,但浏览器可正常访问该链接。已完成:导出keystore.crt到WSO2容器目录、配置Keycloak客户端、在Carbon门户配置Keycloak为服务/身份提供商。


排查与解决步骤

1. 修复容器网络互通问题

容器内部的localhost指向自身,而非宿主机/WSL中的Keycloak容器,导致WSO2无法访问Keycloak:

  • 创建自定义Docker网络:
    docker network create apim-keycloak-net
    
  • 重启两个容器并加入该网络(替换为你的启动参数):
    docker run --name keycloak --network apim-keycloak-net [你的Keycloak启动参数]
    docker run --name wso2apim --network apim-keycloak-net [你的WSO2 APIM启动参数]
    
  • 改用容器名称访问Well-Known URL,例如:http://keycloak:8080/realms/MyRealm/.well-known/openid-configuration(keycloak是你的Keycloak容器名称)

2. 完成证书信任配置

仅将crt文件放入目录无效,需导入到WSO2的信任库:

  • 进入WSO2 APIM容器:
    docker exec -it wso2apim bash
    
  • 导入证书到信任库(默认密码为wso2carbon):
    keytool -importcert -file /wso2am-4.0.0/repository/resources/security/keystore.crt -alias keycloak-cert -keystore /wso2am-4.0.0/repository/resources/security/client-truststore.jks -storepass wso2carbon -noprompt
    
  • 重启WSO2 APIM容器:
    docker restart wso2apim
    

3. 验证Keycloak客户端配置

确保Keycloak中的WSO2 APIM客户端满足以下要求:

  • 访问类型设置为confidential(WSO2作为服务提供商需客户端密钥)
  • 有效重定向URI包含WSO2回调地址:https://localhost:9443/commonauth
  • 开启Service Accounts Enabled,并为服务账号分配view-users、manage-clients等必要权限

4. 查看日志定位具体错误

内部错误的详细原因可从WSO2日志获取:

  • 进入容器查看实时日志:
    docker exec -it wso2apim tail -f /wso2am-4.0.0/repository/logs/wso2carbon.log
    
  • 再次尝试导入URL,根据日志报错(如SSL握手失败、权限不足等)精准修复问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:47:23