Drupal通过OpenID Connect集成Keycloak报缺失必填路由参数错误
Drupal集成Keycloak(OpenID Connect)缺路由参数报错排查
报错核心信息:
Symfony\Component\Routing\Exception\MissingMandatoryParametersException: Some mandatory parameters are missing ("openid_connect_client") to generate a URL for route "openid_connect.redirect_controller_redirect". in Drupal\Core\Routing\UrlGenerator->doGenerate() (line 181 of C:\xampp\htdocs\test\core\lib\Drupal\Core\Routing\UrlGenerator.php).
问题原因
这个报错是生成OpenID Connect模块回调路由的URL时,必填参数openid_connect_client没有被正确传入导致的,常见触发场景有四类:
- Keycloak客户端配置未正确保存、或处于禁用状态,生成回调地址时拿不到对应客户端的标识
- 自定义代码、模板手动调用该路由时,漏传
openid_connect_client参数 - OpenID Connect模块版本过低,存在已知的路由参数传递bug
- Drupal缓存未更新,残留了旧的路由逻辑,没有加载新的客户端配置
排查解决步骤
按以下顺序操作即可定位修复:
- 核对客户端配置
进入Drupal后台路径/admin/config/services/openid-connect,检查已添加的Keycloak客户端是否为启用状态,点进编辑页直接重新保存一次,确认Client ID、Client Secret、Keycloak授权/令牌/用户信息端点配置没有缺失,记录下该客户端的机器ID(列表里ID列的值,通常是keycloak)。 - 检查自定义路由调用
搜索项目内所有调用openid_connect.redirect_controller_redirect路由的代码、Twig模板,确认生成URL时传入了openid_connect_client参数,PHP端正确调用示例:// 注意把参数值替换成你自己的Keycloak客户端机器ID $redirect_url = Url::fromRoute('openid_connect.redirect_controller_redirect', [ 'openid_connect_client' => 'keycloak' ])->toString(); - 清理全量缓存
进入后台/admin/config/development/performance点击清除所有缓存,如果部署了Redis、Memcached等外部缓存服务,同步清空外部缓存数据,排除旧路由缓存的干扰。 - 检查模块版本与兼容性
如果当前使用的OpenID Connect主模块版本低于8.x-1.2稳定版,先升级到官方稳定版,早期alpha版本存在多客户端场景下漏传路由参数的已知问题;如果安装了Keycloak专属适配子模块,确认子模块和主模块版本匹配,不存在版本冲突。 - 排查第三方模块冲突
临时禁用登录跳转、路径重写类模块(比如Login Destination、自定义403拦截模块)测试,这类模块可能会在跳转流程中过滤掉URL参数,导致路由生成时拿不到必填值。
内容的提问来源于stack exchange,提问作者anushka
相关产品推荐
相关产品推荐

