使用 Proxy-WASM 的 Go SDK 编写的 JWT 过滤器插件。使用 Tinygo 进行编译。适用于 Envoy、Istio 等环境。
- 提供 JWT 验证
- 支持使用 JSON 进行配置
- 支持路径匹配
- 自定义验证规则
- 集成统计功能
- 高度可扩展
本插件使用 Tinygo 将 Go 语言源代码编译为 WASM。请遵循官方文档安装 Tinygo。
在本项目根路径下,执行脚本进行编译:
$ bash ./script/build.sh
编译产生的目标文件为 jwt-filter.wasm
。
本项目在 ./examples
目录下提供了样例 envoy.yaml
配置文件和 Dockerfile
,可以构建一个简单的使用本插件的 Envoy 镜像。请预先在环境中安装 Docker。
执行如下脚本构建 Docker 镜像:
$ bash ./script/docker_build.sh
这将构建名为 wokron/envoy:demo
的镜像。使用如下命令运行该镜像:
$ docker run \
-it \
--rm \
-p 18000:18000 \
-p 8001:8001 \
wokron/envoy:demo
这将运行一个具有 JWT Filter 的 Envoy 容器。会对路径为 /api/v1
下的请求进行 JWT 验证,除了 /api/v1/abc
;此外禁止对其他路径的请求。按照配置,JWT 所使用的密钥为 your-secure-key
。
$ curl localhost:18000/api/v1/abc
hello from the server
$ curl localhost:18000/api/v1/xxx
Forbidden
$ curl localhost:18000/api/v2/abc
Forbidden
此外本插件还提供了统计功能,可以在 Envoy 的 Prometheus 接口中得知本插件的处理情况。
$ curl localhost:8001/stats/prometheus | grep "envoy_wasm_jwt_filter"
本插件支持使用 JSON 进行配置。具体配置可以参考配置文档。