Kong + JWT:如何配置端点授权排除规则?
如何让Kong忽略特定端点的JWT认证?
当然没问题!Kong完全支持通过配置来让特定端点跳过JWT认证,这里有两种常用的实现方式,你可以根据自己的场景选择:
方法一:修改JWT插件配置,添加URI排除规则
这是最直接的方式,只需要给已有的JWT插件添加排除端点的配置即可:
- 找到你当前绑定了JWT插件的服务或路由(可以通过Kong Admin API或者Kong Manager查看)
- 在JWT插件的配置中,设置
config.uri_exclude参数,将需要跳过认证的端点路径添加到列表里。比如你的开放端点是/api/public/health,就把这个路径加入数组 - 如果你用Kong Admin API来修改,命令示例如下:
# 替换{plugin-id}为你的JWT插件ID,{kong-admin-url}为你的Kong管理地址 curl -X PATCH http://{kong-admin-url}/plugins/{plugin-id} \ -H "Content-Type: application/json" \ -d '{ "config": { "uri_exclude": ["/api/public/health"] } }'
- 配置生效后,Kong会自动检查请求的URI:如果匹配排除列表里的路径,就直接跳过JWT认证流程,转发请求到上游服务。
方法二:为开放端点单独创建无认证的路由
如果你不想改动原有插件的全局配置,可以给这个开放端点单独创建一条独立路由,不绑定JWT插件:
- 确保你已经知道上游服务的ID(或者可以用服务名称关联)
- 通过Kong Admin API创建新路由,示例如下:
# 替换{your-service-id}为你的上游服务ID,{kong-admin-url}为你的Kong管理地址 curl -X POST http://{kong-admin-url}/routes \ -H "Content-Type: application/json" \ -d '{ "name": "public-health-route", "paths": ["/api/public/health"], "service": { "id": "{your-service-id}" } }'
- 这条路由只会匹配指定的开放端点,而且没有绑定JWT插件,所以访问该端点时不会触发认证。
注意事项
- 配置URI排除时,要注意Kong的路径匹配规则:如果你的路径是前缀匹配(比如
/api/public),会跳过所有以该路径开头的请求,所以尽量精确到具体端点,避免意外跳过需要认证的接口 - 如果使用Kong Manager(Web控制台)操作,直接找到对应的JWT插件,在配置页面的“URI Exclude”字段添加路径即可,操作更直观
内容的提问来源于stack exchange,提问作者jamesamuir
相关产品推荐
相关产品推荐

