Kong Basic Auth不同服务路由认证凭证可跨路由访问问题咨询
问题定位步骤
- 确认basic-auth插件的绑定范围:Kong插件支持全局、服务、路由三级绑定,若basic-auth被绑定到全局,所有合法凭证默认都可访问所有开启认证的路由,这是该问题最常见的诱因。可通过Admin API执行
GET /plugins查询,若返回的插件配置中service.id和route.id均为空,即可确认为全局绑定。 - 检查访问控制逻辑配置:Kong原生basic-auth插件仅负责校验凭证的合法性,不会自动限制凭证的访问范围,只要是系统内存在的有效凭证,都能通过任意绑定了basic-auth插件的路由的认证校验,除非额外配置了权限控制规则。
- 排查其他插件冲突:检查是否启用了全局放行类插件,或是ACL、RBAC类插件配置错误,导致权限限制未生效。
修复方案
- 调整basic-auth插件绑定范围
解绑全局的basic-auth插件,改为分别给对应路由单独绑定,操作命令参考:# 删除全局basic-auth插件 curl -X DELETE http://<kong-admin-ip>:8001/plugins/<basic-auth插件ID> # 给Route1绑定basic-auth curl -X POST http://<kong-admin-ip>:8001/routes/Route1/plugins \ --data "name=basic-auth" \ --data "config.hide_credentials=true" # 给Route2绑定basic-auth curl -X POST http://<kong-admin-ip>:8001/routes/Route2/plugins \ --data "name=basic-auth" \ --data "config.hide_credentials=true" - 配合ACL插件做细粒度权限控制
给不同用户分配独立访问组,在对应路由上配置组访问限制,操作命令参考:# 给user1分配group1组 curl -X POST http://<kong-admin-ip>:8001/consumers/user1/acls \ --data "group=group1" # 给user2分配group2组 curl -X POST http://<kong-admin-ip>:8001/consumers/user2/acls \ --data "group=group2" # 给Route1绑定ACL插件,仅允许group1访问 curl -X POST http://<kong-admin-ip>:8001/routes/Route1/plugins \ --data "name=acl" \ --data "config.allow=group1" # 给Route2绑定ACL插件,仅允许group2访问 curl -X POST http://<kong-admin-ip>:8001/routes/Route2/plugins \ --data "name=acl" \ --data "config.allow=group2" - 企业版用户可直接配置路由消费者白名单
若使用Kong Enterprise版本,可直接在路由配置中指定允许访问的消费者ID列表,无需额外部署ACL插件即可实现权限隔离。
内容的提问来源于stack exchange,提问作者Davi Steewel
相关产品推荐
相关产品推荐

