package main import ( "encoding/base64" "encoding/json" "fmt" "strings" ) func userIDFromJWT(token string) (string, error) { parts := strings.Split(token, ".") if len(parts) < 2 { return "", fmt.Errorf("token is not a JWT") } payload, err := base64.RawURLEncoding.DecodeString(parts[1]) if err != nil { return "", err } var claims map[string]any if err := json.Unmarshal(payload, &claims); err != nil { return "", err } sub, _ := claims["sub"].(string) if sub == "" { return "", fmt.Errorf("token has no sub claim") } return sub, nil }