Skip to content

Commit dc8fb4c

Browse files
committed
change: upgrade JWT lib and add test cases for token validation
1 parent 0338588 commit dc8fb4c

File tree

7 files changed

+46
-12
lines changed

7 files changed

+46
-12
lines changed

auth/auth.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"strings"
1313

1414
"github.com/Nerzal/gocloak/v12"
15-
"github.com/golang-jwt/jwt/v4"
15+
"github.com/golang-jwt/jwt/v5"
1616
)
1717

1818
// KeycloakAuthorizer is used to validate if JWT has a correct signature and is valid and returns keycloak claims

auth/example_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919

2020
"github.com/Nerzal/gocloak/v12"
2121
"github.com/gin-gonic/gin"
22-
"github.com/golang-jwt/jwt/v4"
22+
"github.com/golang-jwt/jwt/v5"
2323
"github.com/jarcoal/httpmock"
2424
"github.com/samber/lo"
2525

auth/jwt_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
"testing"
1717

1818
"github.com/Nerzal/gocloak/v12"
19-
"github.com/golang-jwt/jwt/v4"
19+
"github.com/golang-jwt/jwt/v5"
2020
"github.com/jarcoal/httpmock"
2121
"github.com/samber/lo"
2222
"github.com/stretchr/testify/require"

client/keycloakJWTReceiverCachedInMemory.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"fmt"
99

1010
"github.com/Nerzal/gocloak/v12"
11-
"github.com/golang-jwt/jwt/v4"
11+
"github.com/golang-jwt/jwt/v5"
1212
"github.com/rs/zerolog/log"
1313
)
1414

@@ -37,7 +37,10 @@ func isTokenValid(token *gocloak.JWT) bool {
3737
return false
3838
}
3939

40-
err = claims.Valid()
40+
err = jwt.NewValidator(
41+
jwt.WithIssuedAt(),
42+
jwt.WithExpirationRequired(),
43+
).Validate(claims)
4144
if err != nil {
4245
log.Debug().Msgf("JWT access token is invalid: %v", err)
4346
return false

client/keycloakJWTReceiverCachedInMemory_test.go

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,35 @@ func TestKeycloakJWTReceiverCachedInMemory_GetClientToken(t *testing.T) {
4747
{
4848
name: "Expired cached token",
4949
cachedToken: &gocloak.JWT{
50-
AccessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyMzEwMjJ9.hsfQPY3ZVrVIV-bzI54NRoTDG6wWzORVp68lxGa3D08", // todo add actual expired token -> create one on jwt.io
50+
AccessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyMzEwMjJ9.hsfQPY3ZVrVIV-bzI54NRoTDG6wWzORVp68lxGa3D08",
51+
},
52+
mockToken: &gocloak.JWT{
53+
AccessToken: "test_token",
54+
},
55+
expectedToken: &gocloak.JWT{
56+
AccessToken: "test_token",
57+
},
58+
expectedError: nil,
59+
shouldFetchToken: true,
60+
},
61+
{
62+
name: "NotBefore date is in the future",
63+
cachedToken: &gocloak.JWT{
64+
AccessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwibmJmIjo0ODczMjQyNTg3LCJleHAiOjQ4NzQyNDI1ODd9.QZeQwoWl-HRbCcuZbt_3DFnA_h-zD5DhPmcBR0TyrQw",
65+
},
66+
mockToken: &gocloak.JWT{
67+
AccessToken: "test_token",
68+
},
69+
expectedToken: &gocloak.JWT{
70+
AccessToken: "test_token",
71+
},
72+
expectedError: nil,
73+
shouldFetchToken: true,
74+
},
75+
{
76+
name: "IssuedAt date is in the future",
77+
cachedToken: &gocloak.JWT{
78+
AccessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0Ijo0ODczMjQyNTg3LCJleHAiOjQ4NzQyNDI1ODd9.h63qP0fMQGgx5S8eV-EHEO1zgSlBmjX3xR80iXnvhX0",
5179
},
5280
mockToken: &gocloak.JWT{
5381
AccessToken: "test_token",
@@ -61,13 +89,13 @@ func TestKeycloakJWTReceiverCachedInMemory_GetClientToken(t *testing.T) {
6189
{
6290
name: "Valid cached token",
6391
cachedToken: &gocloak.JWT{
64-
AccessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
92+
AccessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjQ4NzMyNDI1ODd9.BHuBKDS9MUC01jmo_p4AcVChkbV0aiDZBXcU-hpj8mg",
6593
},
6694
mockToken: &gocloak.JWT{
6795
AccessToken: "test_token",
6896
},
6997
expectedToken: &gocloak.JWT{
70-
AccessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
98+
AccessToken: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjQ4NzMyNDI1ODd9.BHuBKDS9MUC01jmo_p4AcVChkbV0aiDZBXcU-hpj8mg",
7199
},
72100
expectedError: nil,
73101
shouldFetchToken: false,

go.mod

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
module github.com/greenbone/keycloak-client-golang
22

3-
go 1.21
3+
go 1.22
44

55
require (
66
github.com/Nerzal/gocloak/v12 v12.0.0
77
github.com/gin-gonic/gin v1.10.0
8-
github.com/golang-jwt/jwt/v4 v4.5.0
8+
github.com/golang-jwt/jwt/v5 v5.2.1
99
github.com/jarcoal/httpmock v1.3.1
1010
github.com/rs/zerolog v1.33.0
1111
github.com/samber/lo v1.39.0
@@ -25,6 +25,7 @@ require (
2525
github.com/go-playground/validator/v10 v10.21.0 // indirect
2626
github.com/go-resty/resty/v2 v2.13.1 // indirect
2727
github.com/goccy/go-json v0.10.3 // indirect
28+
github.com/golang-jwt/jwt/v4 v4.4.2 // indirect
2829
github.com/google/go-cmp v0.6.0 // indirect
2930
github.com/json-iterator/go v1.1.12 // indirect
3031
github.com/klauspost/cpuid/v2 v2.2.7 // indirect

go.sum

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ github.com/go-resty/resty/v2 v2.13.1/go.mod h1:GznXlLxkq6Nh4sU59rPmUw3VtgpO3aS96
3131
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
3232
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
3333
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
34-
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
35-
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
34+
github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs=
35+
github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
36+
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
37+
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
3638
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
3739
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
3840
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=

0 commit comments

Comments
 (0)