WSO2 API Manager 3.2.0门户无外网环境captcha配置问题咨询
问题1:WSO2 API Manager 3.2.0默认未提供/publisher、/devportal门户验证码能力的原因
- 产品设计定位偏向灵活适配:不同企业的安全规范差异极大,部分企业需要对接内部统一验证码服务,部分低风险场景不需要人机校验,默认不内置验证码能力可以适配更多场景的自定义需求,避免绑定单一方案限制用户选择。
- 降低开箱即用的部署复杂度:WSO2 APIM默认配置优先保障开发测试环境快速启动验证,验证码属于生产级安全增强能力,默认不开启可以减少首次部署的依赖项和配置成本。
- 安全能力分层设计:3.2.0版本的默认安全能力优先覆盖API调用层面的OAuth2令牌校验、权限管控等核心能力,门户层面的人机校验作为可选扩展能力开放,未纳入基础发行版的默认内置功能。
问题2:无互联网生产环境为/publisher、/devportal配置验证码方案(非Google reCAPTCHA)
整个方案所有组件均部署在内网环境,不需要外部互联网访问,完全符合无互联网生产环境的要求
前置准备
- 部署本地自托管验证码服务:可基于Kaptcha、EasyCaptcha等开源无依赖的验证码组件开发轻量内网验证码服务,仅需提供两个基础接口:
GET /api/captcha/generate用于返回验证码图片和唯一请求ID,POST /api/captcha/verify用于接收请求ID和用户输入值、返回校验结果。 - 获取对应门户的扩展入口:WSO2 APIM 3.2.0的publisher、devportal均为Jaggery/React开发的可扩展应用,源码路径分别为产品包内的
/repository/deployment/server/jaggeryapps/publisher和/repository/deployment/server/jaggeryapps/devportal。
方案1:前端嵌入校验(轻量快速实现)
- 找到门户登录、注册页面对应的前端组件,新增验证码图片展示区域、用户输入框,页面加载时调用内网验证码服务的生成接口获取图片和请求ID,点击验证码图片可触发刷新重新请求。
- 调整原有登录/注册请求逻辑,用户点击提交后先请求内网验证码服务的校验接口,校验通过后再携带账号密码等凭证请求WSO2原生身份认证接口,校验失败直接返回错误提示,无需向后端传递请求。
方案2:认证链嵌入校验(更高安全性,推荐生产使用)
该方案把验证码校验逻辑放到WSO2服务端执行,避免前端绕过风险
- 开发自定义认证处理Handler,继承WSO2的
AbstractIdentityMessageHandler类,在用户名密码校验逻辑之前拦截登录请求,拿到前端传递的验证码和请求ID,调用内网验证码服务做校验,校验失败直接返回认证错误,校验通过再走后续的账号密码认证流程。 - 把编译好的Handler Jar包放到WSO2产品目录的
/repository/components/dropins路径下。 - 修改
/repository/conf/deployment.toml配置,把自定义Handler加入到认证链对应位置,参考配置如下:
[[tenant.auth_manager.authentication_handler]] name = "CustomCaptchaAuthHandler" order = 5 enable = true properties."CaptchaVerifyEndpoint" = "http://内网验证码服务地址/api/captcha/verify"
- 重启WSO2 APIM服务即可生效。
注意:配置完成后需先在测试环境验证验证码拦截、正常登录的兼容性,确认无误后再同步到生产环境,避免影响现有用户访问。
内容的提问来源于stack exchange,提问作者Tohid Makari
相关产品推荐
相关产品推荐

