• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

zalando / skipper / 23247778842
79%

Build:
DEFAULT BRANCH: master
Ran 18 Mar 2026 02:02PM UTC
Jobs 1
Files 301
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

18 Mar 2026 01:45PM UTC coverage: 78.538% (-0.05%) from 78.592%
23247778842

push

github

web-flow
feat: add jwtValidationKeys filter for JWT validation with direct JWKS URL (#3922)

## Summary

- Add new `jwtValidationKeys` filter that verifies JWT Bearer tokens
using a JWKS URL directly, without requiring OIDC discovery via
`.well-known/openid-configuration`
- Reuses existing `jwtValidationFilter` — the new spec only provides an
alternative entry point that skips OIDC discovery
- Claims validation delegated to `oidcClaimsQuery` as per existing
convention
- Registered alongside `jwtValidation` in skipper.go

## Motivation

The existing `jwtValidation` filter only supports JWKS discovery via
`.well-known/openid-configuration`. Services like Google Chat bots sign
webhook requests with JWTs but publish their public keys at non-standard
JWKS endpoints without OIDC discovery support, making it impossible to
verify these tokens with the current filter.

## Usage

```
jwtValidationKeys("https://www.googleapis.com/service_accounts/v1/jwk/chat@system.gserviceaccount.com")
-> oidcClaimsQuery("/:@_:iss==\"chat@system.gserviceaccount.com\"")
-> oidcClaimsQuery("/:@_:aud==\"123456789\"")
```

Closes #3921

## Test plan

- [x] Spec validation (missing args, too many args, non-string args)
- [x] Valid token, expired token, missing sub claim
- [x] Missing/empty/malformed Bearer tokens
- [x] Algorithm none rejected
- [x] Existing jwtValidation tests still pass

---------

Signed-off-by: ivan-digital <root@ivan.digital>
Co-authored-by: ivan-digital <root@ivan.digital>

29 of 34 new or added lines in 2 files covered. (85.29%)

22 existing lines in 4 files now uncovered.

25908 of 32988 relevant lines covered (78.54%)

86650.92 hits per line

New Missed Lines in Diff

Lines Coverage ∆ File
5
85.82
1.86% filters/auth/jwt_validation.go

Uncovered Existing Lines

Lines Coverage ∆ File
2
80.99
-1.41% logging/loggingtest/logger.go
3
90.35
-0.23% proxy/proxy.go
5
82.05
-12.82% proxy/teebody.go
12
89.19
-4.63% net/redisclient.go
Jobs
ID Job ID Ran Files Coverage
1 23247778842.1 18 Mar 2026 02:02PM UTC 301
78.54
GitHub Action Run
Source Files on build 23247778842
  • Tree
  • List 301
  • Changed 7
  • Source Changed 3
  • Coverage Changed 6
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #23247778842
  • 8c68eac6 on github
  • Prev Build on master (#23155683181)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc