/JWT AntPath

JWT AntPath

2
v0.1.2

JWT AntPath

workflow build

JWT AntPath is a middleware plugin for Traefik which verify JWT excludes configured path, and add payload to header

Limited support AntPath for interpreter plugin

  • AntPath only support / as separator
  • AntPath only support * as wildcard
  • AntPath only support ** as recursive wildcard

Support

paths:
- /base/app-home/**
- /*/doc/**
- /foo/*/doc/**
- /foo/*

Not support: contains(path, "**") && !endWith2Star

paths:
- /**/app-home/**
- /**/app-home/*
- /**/doc/**
- /**/doc/*
- /foo/**/doc/**

Configuration

Traefik helm charts values.yml

experimental:
plugins:
traefik-plugin-jwt-antpath:
moduleName: "github.com/x-ream/traefik-plugin-jwt-antpath"
version: "v0.1.2"

K8s middleware

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: my-jwtantpath
spec:
plugin:
traefik-plugin-jwt-antpath:
headerKey: "Authorization"
secureKey: "my-secret-key"
paths:
- /base/app-home/**

App ingress values.yml

ingress:
enabled: true
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
traefik.ingress.kubernetes.io/router.middlewares: test-my-jwtantpath@kubernetescrd,test-strip-prefix@kubernetescrd
ingressClassName: traefik
hosts:
- host: myapp.com
paths:
- path: /base
pathType: "Prefix"

Other configuration, not for k8s

Static

[experimental.plugins.traefik-plugin-jwt-antpath]
modulename = "github.com/x-ream/traefik-plugin-jwt-antpath"
version = "v0.1.2"

Dynamic

To configure the JWT AntPath plugin you should create a middleware in your dynamic configuration as explained here. The following example creates and uses the JWT AntPath middleware plugin to verify token and add payload to header of all HTTP requests exclude path starting with /foo.

[http.routers]
[http.routers.my-router]
rule = "Host(`localhost`)"
middlewares = ["jwtantpath"]
service = "my-service"
# Very jwt exclude all paths starting with /foo
[http.middlewares]
[http.middlewares.foo.plugin.traefik-plugin-jwt-antpath]
secureKey = "my-secret-key"
headerKey = "Authorization"
paths = ["/foo/**", "/*/goods/**"]
[http.services]
[http.services.my-service]
[http.services.my-service.loadBalancer]
[[http.services.my-service.loadBalancer.servers]]
url = "http://127.0.0.1"