Skip to content

Commit d7c7229

Browse files
author
Thibaut Cholley
committed
Replace caddy replacer by request context replacer
1 parent 6431c93 commit d7c7229

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

jwt.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,11 +300,12 @@ func (ja *JWTAuth) validateSignatureKeys() error {
300300
return nil
301301
}
302302

303-
func (ja *JWTAuth) keyProvider() jws.KeyProviderFunc {
303+
func (ja *JWTAuth) keyProvider(request *http.Request) jws.KeyProviderFunc {
304304
return func(context context.Context, sink jws.KeySink, sig *jws.Signature, _ *jws.Message) error {
305305
if ja.usingJWK() {
306306
// Resolve JWKURL with placeholders
307-
resolvedURL := caddy.NewReplacer().ReplaceAll(ja.JWKURL, "")
307+
replacer := request.Context().Value(caddy.ReplacerCtxKey).(*caddy.Replacer)
308+
resolvedURL := replacer.ReplaceAll(ja.JWKURL, "")
308309

309310
ja.logger.Info("JWK unresolved", zap.String("placeholder_url", ja.JWKURL))
310311
ja.logger.Info("JWK resolved", zap.String("placeholder_url", resolvedURL))
@@ -376,7 +377,7 @@ func (ja *JWTAuth) Authenticate(rw http.ResponseWriter, r *http.Request) (User,
376377
jwt.WithVerify(!ja.SkipVerification),
377378
}
378379
if !ja.SkipVerification {
379-
jwtOptions = append(jwtOptions, jwt.WithKeyProvider(ja.keyProvider()))
380+
jwtOptions = append(jwtOptions, jwt.WithKeyProvider(ja.keyProvider(r)))
380381
}
381382
gotToken, err = jwt.ParseString(tokenString, jwtOptions...)
382383

jwt_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package caddyjwt
22

33
import (
4+
"context"
45
"crypto/ed25519"
56
"crypto/rand"
67
"crypto/rsa"
78
"encoding/base64"
89
"encoding/json"
10+
"github.com/caddyserver/caddy/v2"
911
"net/http"
1012
"net/http/httptest"
1113
"net/url"
@@ -788,6 +790,11 @@ func TestJWK(t *testing.T) {
788790
token := issueTokenStringJWK(MapClaims{"sub": "ggicci"})
789791
rw := httptest.NewRecorder()
790792
r, _ := http.NewRequest("GET", "/", nil)
793+
794+
repl := caddy.NewReplacer()
795+
ctx := context.WithValue(r.Context(), caddy.ReplacerCtxKey, repl)
796+
r = r.WithContext(ctx)
797+
791798
r.Header.Add("Authorization", "Bearer "+token)
792799
gotUser, authenticated, err := ja.Authenticate(rw, r)
793800
assert.Nil(t, err)
@@ -811,6 +818,11 @@ func TestJWKSet(t *testing.T) {
811818
token := issueTokenStringJWK(MapClaims{"sub": "ggicci"})
812819
rw := httptest.NewRecorder()
813820
r, _ := http.NewRequest("GET", "/", nil)
821+
822+
repl := caddy.NewReplacer()
823+
ctx := context.WithValue(r.Context(), caddy.ReplacerCtxKey, repl)
824+
r = r.WithContext(ctx)
825+
814826
r.Header.Add("Authorization", "Bearer "+token)
815827
gotUser, authenticated, err := ja.Authenticate(rw, r)
816828
assert.Nil(t, err)
@@ -834,6 +846,11 @@ func TestJWKSet_KeyNotFound(t *testing.T) {
834846
token := issueTokenStringJWK(MapClaims{"sub": "ggicci"})
835847
rw := httptest.NewRecorder()
836848
r, _ := http.NewRequest("GET", "/", nil)
849+
850+
repl := caddy.NewReplacer()
851+
ctx := context.WithValue(r.Context(), caddy.ReplacerCtxKey, repl)
852+
r = r.WithContext(ctx)
853+
837854
r.Header.Add("Authorization", "Bearer "+token)
838855
gotUser, authenticated, err := ja.Authenticate(rw, r)
839856

0 commit comments

Comments
 (0)