Skip to content

Commit bc9ded2

Browse files
committed
[Bugfix] Fix JWT Secret Tail characters
1 parent a7177ee commit bc9ded2

32 files changed

+822
-271
lines changed

.golangci.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,8 @@ linters-settings:
181181
pkg: strings
182182
- alias: goHttp
183183
pkg: net/http
184+
- alias: jwt
185+
pkg: github.com/golang-jwt/jwt
184186
gci:
185187
sections:
186188
- standard

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
- (Maintenance) Update Envoy to v1.32.5
1818
- (Maintenance) Generate CRD with Schemas
1919
- (Feature) DebugPackage Improvements
20+
- (Bugfix) Align JWT Discovery
2021

2122
## [1.2.47](https://github.com/arangodb/kube-arangodb/tree/1.2.47) (2025-03-28)
2223
- (Bugfix) Use Profile Annotations

cmd/admin.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import (
3838
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
3939

4040
"github.com/arangodb-helper/go-certificates"
41-
"github.com/arangodb/go-driver/jwt"
4241
"github.com/arangodb/go-driver/v2/connection"
4342

4443
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
@@ -51,6 +50,7 @@ import (
5150
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
5251
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic"
5352
"github.com/arangodb/kube-arangodb/pkg/util/kclient"
53+
"github.com/arangodb/kube-arangodb/pkg/util/token"
5454
)
5555

5656
const (
@@ -405,16 +405,22 @@ func getJWTTokenFromSecrets(ctx context.Context, secrets generic.ReadClient[*cor
405405
ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx)
406406
defer cancel()
407407

408-
token, err := k8sutil.GetTokenSecret(ctxChild, secrets, name)
408+
secret, err := k8sutil.GetTokenSecret(ctxChild, secrets, name)
409409
if err != nil {
410410
return nil, errors.WithMessage(err, fmt.Sprintf("failed to get secret \"%s\"", name))
411411
}
412412

413-
bearerToken, err := jwt.CreateArangodJwtAuthorizationHeader(token, "kube-arangodb")
413+
authz, err := token.NewClaims().With(
414+
token.WithDefaultClaims(),
415+
token.WithServerID("kube-arangodb"),
416+
token.WithAllowedPaths("/_api/version"),
417+
).Sign(secret)
414418
if err != nil {
415419
return nil, errors.WithMessage(err, fmt.Sprintf("failed to create bearer token from secret \"%s\"", name))
416420
}
417421

422+
bearerToken := fmt.Sprintf("bearer %s", authz)
423+
418424
return JWTAuthentication{key: "Authorization", value: bearerToken}, nil
419425
}
420426

integrations/authentication/v1/cache.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// DISCLAIMER
33
//
4-
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
4+
// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany
55
//
66
// Licensed under the Apache License, Version 2.0 (the "License");
77
// you may not use this file except in compliance with the License.
@@ -29,6 +29,7 @@ import (
2929

3030
"github.com/arangodb/kube-arangodb/pkg/util"
3131
"github.com/arangodb/kube-arangodb/pkg/util/errors"
32+
"github.com/arangodb/kube-arangodb/pkg/util/token"
3233
)
3334

3435
const MaxSize = 128
@@ -38,9 +39,7 @@ type cache struct {
3839

3940
eol time.Time
4041

41-
signingToken []byte
42-
43-
validationTokens [][]byte
42+
token token.Secret
4443
}
4544

4645
func (i *implementation) newCache(cfg Configuration) (*cache, error) {
@@ -91,10 +90,11 @@ func (i *implementation) newCache(cfg Configuration) (*cache, error) {
9190
}
9291

9392
cache := cache{
94-
parent: i,
95-
eol: time.Now().Add(i.cfg.TTL),
96-
signingToken: tokens[keys[0]],
97-
validationTokens: data,
93+
parent: i,
94+
eol: time.Now().Add(i.cfg.TTL),
95+
token: token.NewSecretSet(token.NewSecret(tokens[keys[0]]), util.FormatList(data, func(a []byte) token.Secret {
96+
return token.NewSecret(a)
97+
})...),
9898
}
9999

100100
return &cache, nil

integrations/authentication/v1/implementation.go

+12-6
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,13 @@ func (i *implementation) CreateToken(ctx context.Context, request *pbAuthenticat
168168
}
169169

170170
// Token is validated, we can continue with creation
171-
secret := cache.signingToken
171+
secret := cache.token
172172

173-
signedToken, err := token.New(secret, token.NewClaims().With(token.WithDefaultClaims(), token.WithCurrentIAT(), token.WithDuration(duration), token.WithUsername(user)))
173+
signedToken, err := token.NewClaims().With(
174+
token.WithDefaultClaims(),
175+
token.WithCurrentIAT(),
176+
token.WithDuration(duration),
177+
token.WithUsername(user)).Sign(secret)
174178
if err != nil {
175179
return nil, err
176180
}
@@ -233,23 +237,25 @@ func (i *implementation) Identity(ctx context.Context, _ *pbSharedV1.Empty) (*pb
233237
}
234238

235239
func (i *implementation) extractTokenDetails(cache *cache, t string) (string, time.Duration, error) {
236-
// Let's check if token is signed properly
240+
// Token is validated, we can continue with creation
241+
secret := cache.token
237242

238-
p, err := token.ParseWithAny(t, cache.validationTokens...)
243+
// Let's check if token is signed properly
244+
p, err := secret.Validate(t)
239245
if err != nil {
240246
return "", 0, err
241247
}
242248

243249
user := DefaultAdminUser
244-
if v, ok := p[token.ClaimPreferredUsername]; ok {
250+
if v, ok := p.Claims()[token.ClaimPreferredUsername]; ok {
245251
if s, ok := v.(string); ok {
246252
user = s
247253
}
248254
}
249255

250256
duration := DefaultTokenMaxTTL
251257

252-
if v, ok := p[token.ClaimEXP]; ok {
258+
if v, ok := p.Claims()[token.ClaimEXP]; ok {
253259
switch o := v.(type) {
254260
case int64:
255261
duration = time.Until(time.Unix(o, 0))

pkg/api/api.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/api/auth.go

+5-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/api/jwt.go

+13-13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/deployment/context_impl.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ func (d *Deployment) getJWTToken() (string, bool) {
295295
func (d *Deployment) GetSyncServerClient(ctx context.Context, group api.ServerGroup, id string) (client.API, error) {
296296
// Fetch monitoring token
297297
secretName := d.GetSpec().Sync.Monitoring.GetTokenSecretName()
298-
monitoringToken, err := k8sutil.GetTokenSecret(ctx, d.GetCachedStatus().Secret().V1().Read(), secretName)
298+
monitoringToken, err := k8sutil.GetTokenSecretString(ctx, d.GetCachedStatus().Secret().V1().Read(), secretName)
299299
if err != nil {
300300
d.log.Err(err).Str("secret-name", secretName).Debug("Failed to get sync monitoring secret")
301301
return nil, errors.WithStack(err)

0 commit comments

Comments
 (0)