Skip to content

Commit dee18d7

Browse files
Adding session ID (UUID as string) parameter in JWT token
1 parent 070e3f2 commit dee18d7

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

internal/token/token.go

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,19 @@ import (
77
"time"
88

99
"github.com/golang-jwt/jwt/v5"
10+
"github.com/google/uuid"
1011

1112
"github.com/PythonHacker24/linux-acl-management-backend/config"
1213
)
1314

1415
/* generating jwt token for user identification with specified configs */
15-
func GenerateJWT(username string) (string, error) {
16+
func GenerateJWT(username string, sessionID uuid.UUID) (string, error) {
1617
expiryHours := config.BackendConfig.BackendSecurity.JWTExpiry
1718

1819
/* generate JWT token with claims */
1920
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
2021
"username": username,
22+
"sessionID": sessionID,
2123
"exp": time.Now().Add(time.Hour * time.Duration(expiryHours)).Unix(),
2224
})
2325

@@ -47,37 +49,42 @@ func ValidateJWT(tokenString string) (jwt.MapClaims, error) {
4749
return nil, fmt.Errorf("invalid token")
4850
}
4951

50-
/* extracts username from JWT token */
51-
func GetUsernameFromJWT(tokenString string) (string, error) {
52+
/* extracts username and sessionID from JWT token */
53+
func GetDataFromJWT(tokenString string) (string, string, error) {
5254
/* get claims from JWT Token */
5355
claims, err := ValidateJWT(tokenString)
5456
if err != nil {
55-
return "", fmt.Errorf("JWT validation error: %w", err)
57+
return "", "", fmt.Errorf("JWT validation error: %w", err)
5658
}
5759

5860
/* extract username from JWT Token */
5961
username, ok := claims["username"].(string)
6062
if !ok {
61-
return "", fmt.Errorf("username not found in token")
63+
return "", "", fmt.Errorf("username not found in token")
6264
}
6365

64-
return username, nil
66+
/* extract sessionID from JWT Token */
67+
sessionID, ok := claims["sessionID"].(string)
68+
if !ok {
69+
return "", "", fmt.Errorf("sessionID not found in token")
70+
}
71+
return username, sessionID, nil
6572
}
6673

67-
/* extract username from http request (wrapper around GetUsernameFromJWT for http requests) */
68-
func ExtractUsernameFromRequest(r *http.Request) (string, error) {
74+
/* extract username and sessionID from http request (wrapper around GetUsernameFromJWT for http requests) */
75+
func ExtractDataFromRequest(r *http.Request) (string, string, error) {
6976
/* get the authorization header */
7077
authHeader := r.Header.Get("Authorization")
7178
if authHeader == "" {
72-
return "", fmt.Errorf("authorization header not found")
79+
return "", "", fmt.Errorf("authorization header not found")
7380
}
7481

7582
/* check if the header is in the correct format */
7683
parts := strings.Split(authHeader, " ")
7784
if len(parts) != 2 || parts[0] != "Bearer" {
78-
return "", fmt.Errorf("invalid authorization header format")
85+
return "","", fmt.Errorf("invalid authorization header format")
7986
}
8087

81-
/* extract username from JWT token */
82-
return GetUsernameFromJWT(parts[1])
88+
/* extract username and sessionID from JWT token */
89+
return GetDataFromJWT(parts[1])
8390
}

0 commit comments

Comments
 (0)