Skip to content

Commit 191e0c9

Browse files
committed
feat: add simple token refresh
1 parent 3afee24 commit 191e0c9

File tree

5 files changed

+25
-15
lines changed

5 files changed

+25
-15
lines changed

auth/auth_middleware.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ package auth
33
import (
44
"context"
55
"errors"
6+
"fmt"
67
"net/http"
78
"strings"
89

10+
"github.com/golang-jwt/jwt/v5"
11+
912
"github.com/getkin/kin-openapi/openapi3"
1013
"github.com/getkin/kin-openapi/routers"
1114
"github.com/getkin/kin-openapi/routers/legacy"
@@ -148,18 +151,26 @@ func checkSecurityRequirements(r *http.Request,
148151

149152
func userByToken(ctx context.Context, secretStore crypt.SecretStore, userRepo models.IUserRepo, tokenString string) (*models.User, error) {
150153
claims, err := VerifyToken(secretStore.SharedSecret(), tokenString)
151-
// make sure no audience is set for login token
152-
if err != nil || !claims.VerifyAudience(LoginAudience, false) {
154+
if err != nil {
153155
return nil, ErrAuthenticatingRequest
154156
}
157+
// make sure no audience is set for login token
158+
validator := jwt.NewValidator(jwt.WithAudience(LoginAudience))
155159

156-
username := claims.Subject
160+
if err = validator.Validate(claims); err != nil {
161+
return nil, fmt.Errorf("invalid token: %s %w", err, ErrAuthenticatingRequest)
162+
}
163+
164+
username, err := claims.GetSubject()
165+
if err != nil {
166+
return nil, err
167+
}
157168
userData, err := userRepo.Get(ctx, models.NewGetUserParams().SetName(username))
158169
if err != nil {
159170
log.With(
160-
"token_id", claims.Id,
171+
"token", tokenString,
161172
"username", username,
162-
"subject", claims.Subject,
173+
"subject", username,
163174
).Debugf("could not find user id by credentials %v", err)
164175
return nil, ErrAuthenticatingRequest
165176
}

auth/jwt_login.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package auth
33
import (
44
"time"
55

6-
"github.com/golang-jwt/jwt"
6+
"github.com/golang-jwt/jwt/v5"
77
"github.com/google/uuid"
88
)
99

@@ -22,6 +22,7 @@ func GenerateJWTLogin(secret []byte, userID string, issuedAt, expiresAt time.Tim
2222
"iat": issuedAt.Unix(),
2323
"exp": expiresAt.Unix(),
2424
}
25+
2526
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
2627
return token.SignedString(secret)
2728
}

auth/token.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ import (
44
"errors"
55
"fmt"
66

7-
"github.com/golang-jwt/jwt"
7+
"github.com/golang-jwt/jwt/v5"
88
)
99

1010
var (
1111
ErrUnexpectedSigningMethod = errors.New("unexpected signing method")
1212
)
1313

14-
func VerifyToken(secret []byte, tokenString string) (*jwt.StandardClaims, error) {
15-
claims := &jwt.StandardClaims{}
14+
func VerifyToken(secret []byte, tokenString string) (jwt.Claims, error) {
15+
claims := &jwt.MapClaims{}
1616
token, err := jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) {
1717
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
1818
return nil, fmt.Errorf("%w: %s", ErrUnexpectedSigningMethod, token.Header["alg"])
@@ -22,5 +22,6 @@ func VerifyToken(secret []byte, tokenString string) (*jwt.StandardClaims, error)
2222
if err != nil || !token.Valid {
2323
return nil, ErrInvalidToken
2424
}
25+
2526
return claims, nil
2627
}

go.mod

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ require (
2525
github.com/go-chi/chi/v5 v5.0.10
2626
github.com/go-openapi/swag v0.22.4
2727
github.com/go-test/deep v1.1.0
28-
github.com/golang-jwt/jwt v3.2.2+incompatible
28+
github.com/golang-jwt/jwt/v5 v5.2.0
2929
github.com/google/go-cmp v0.6.0
3030
github.com/google/uuid v1.4.0
3131
github.com/gorilla/sessions v1.2.2
@@ -103,7 +103,6 @@ require (
103103
github.com/go-openapi/jsonpointer v0.19.6 // indirect
104104
github.com/go-sql-driver/mysql v1.7.0 // indirect
105105
github.com/gogo/protobuf v1.3.2 // indirect
106-
github.com/golang-jwt/jwt/v5 v5.0.0 // indirect
107106
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
108107
github.com/golang/protobuf v1.5.3 // indirect
109108
github.com/google/s2a-go v0.1.7 // indirect

go.sum

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,8 @@ github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
191191
github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
192192
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
193193
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
194-
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
195-
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
196-
github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE=
197-
github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
194+
github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
195+
github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
198196
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
199197
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
200198
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=

0 commit comments

Comments
 (0)