Skip to content

Commit d338445

Browse files
committed
fix: lru cache for invalidated tokens
Signed-off-by: Dario Tranchitella <[email protected]>
1 parent 665c45c commit d338445

File tree

1 file changed

+9
-1
lines changed
  • internal/webserver/middleware

1 file changed

+9
-1
lines changed

internal/webserver/middleware/jwt.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,23 @@ import (
1111
"github.com/gorilla/mux"
1212
authenticationv1 "k8s.io/api/authentication/v1"
1313
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14+
"k8s.io/apimachinery/pkg/util/sets"
1415
"sigs.k8s.io/controller-runtime/pkg/client"
1516

1617
"github.com/projectcapsule/capsule-proxy/internal/webserver/errors"
1718
)
1819

1920
func CheckJWTMiddleware(client client.Writer) mux.MiddlewareFunc {
21+
invalidatedToken := sets.New[string]()
22+
2023
return func(next http.Handler) http.Handler {
2124
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
2225
var err error
2326

2427
token := strings.ReplaceAll(request.Header.Get("Authorization"), "Bearer ", "")
2528

26-
if len(token) > 0 {
29+
switch {
30+
case len(token) > 0 && !invalidatedToken.Has(token):
2731
tr := authenticationv1.TokenReview{
2832
TypeMeta: metav1.TypeMeta{
2933
Kind: "TokenReview",
@@ -37,8 +41,12 @@ func CheckJWTMiddleware(client client.Writer) mux.MiddlewareFunc {
3741
errors.HandleError(writer, err, "cannot create TokenReview")
3842
}
3943
if statusErr := tr.Status.Error; len(statusErr) > 0 {
44+
invalidatedToken.Insert(token)
45+
4046
errors.HandleUnauthorized(writer, fmt.Errorf(statusErr), "cannot authenticate the token due to error")
4147
}
48+
case invalidatedToken.Has(token):
49+
errors.HandleUnauthorized(writer, fmt.Errorf("token is invalid"), "cannot authenticate the token due to error")
4250
}
4351

4452
next.ServeHTTP(writer, request)

0 commit comments

Comments
 (0)