package jwt import ( "fmt" "net/http" "time" "github.com/golang-jwt/jwt/v5" ) /* Dans le snippet de code ci-dessus, nous importons les colis nécessaires, y compris github.com/golang-jwt/jwt/v5. Nous créons un nouveau jeton JWT en utilisant le jwt.NewWithClaims()fonction. Nous spécifions la méthode de signature comme HS256 et des informations pertinentes telles que le nom d'utilisateur et la date d'expiration du jeton. Ensuite, nous signons le jeton avec une clé secrète et retournons le jeton généré comme une chaîne. */ var secretKey = []byte("secret-key") func CreateToken(username string) (string, error) { token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "username": username, "exp": time.Now().Add(time.Hour * 24).Unix(), }) tokenString, err := token.SignedString(secretKey) if err != nil { return "", err } fmt.Sprintf(tokenString) return tokenString, nil } /* Dans le snippet de code ci-dessus, nous utilisons le jwt.Parse()fonctionner pour analyser et vérifier le jeton. Nous fournissons une fonction de rappel pour récupérer la clé secrète utilisée pour signer le jeton. Si le jeton est valide, nous continuons à traiter la demande; sinon, nous renvoyons une erreur indiquant que le jeton est invalide. */ func verifyToken(tokenString string) error { token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return secretKey, nil }) if err != nil { return err } if !token.Valid { return fmt.Errorf("invalid token") } return nil } func ProtectedHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") tokenString := r.Header.Get("Authorization") if tokenString == "" { w.WriteHeader(http.StatusUnauthorized) fmt.Fprint(w, "Missing authorization header") return } tokenString = tokenString[len("Bearer "):] err := verifyToken(tokenString) if err != nil { w.WriteHeader(http.StatusUnauthorized) fmt.Fprint(w, "Invalid token") return } fmt.Fprint(w, "Welcome to the the protected area") }