0Pricing
Go Academy · Lezione

Middleware per autenticazione e limitazione della frequenza

Validazione dei JWT e rate limiting con token bucket

Middleware per autenticazione e limitazione della frequenza è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Middleware di autenticazione JWT

Estragga, analizzi e convalidi un JWT dall'header Authorization:

func JWTAuth(secret []byte) func(http.Handler) http.Handler {
    return func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            header := r.Header.Get("Authorization")
            if !strings.HasPrefix(header, "Bearer ") {
                http.Error(w, "missing token", 401); return
            }
            token := strings.TrimPrefix(header, "Bearer ")
            claims, err := parseJWT(token, secret)
            if err != nil {
                http.Error(w, "invalid token", 401); return
            }
            ctx := context.WithValue(r.Context(), claimsKey{}, claims)
            next.ServeHTTP(w, r.WithContext(ctx))
        })
    }
}

Autenticazione tramite chiave API

Convalidi una chiave API proveniente da un header confrontandola con un database o con un insieme in memoria:

func APIKeyAuth(validKeys map[string]bool) func(http.Handler) http.Handler {
    return func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            key := r.Header.Get("X-API-Key")
            if !validKeys[key] {
                http.Error(w, "forbidden", 403); return
            }
            next.ServeHTTP(w, r)
        })
    }
}

Limitatore del rate con token bucket

Utilizzi golang.org/x/time/rate con una mappa di limitatori per IP:

var limiters sync.Map

func getLimiter(ip string) *rate.Limiter {
    v, _ := limiters.LoadOrStore(ip, rate.NewLimiter(rate.Every(time.Second), 10))
    return v.(*rate.Limiter)
}

Middleware per il rate limiting

Controlli il limitatore nel middleware e restituisca 429 se il limite viene superato:

func RateLimit(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        ip, _, _ := net.SplitHostPort(r.RemoteAddr)
        if !getLimiter(ip).Allow() {
            http.Error(w, "rate limit exceeded", 429); return
        }
        next.ServeHTTP(w, r)
    })
}

Header Retry-After

Includa un header Retry-After con il numero di secondi che il client deve attendere prima di riprovare:

w.Header().Set("Retry-After", "1")
http.Error(w, "rate limit exceeded", 429)

Controllo degli accessi basato sui ruoli

Dopo l'autenticazione, controlli i ruoli dell'utente nelle claim del context prima di chiamare Next:

func RequireRole(role string) func(http.Handler) http.Handler {
    return func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            claims := claimsFromContext(r.Context())
            if !claims.HasRole(role) {
                http.Error(w, "forbidden", 403); return
            }
            next.ServeHTTP(w, r)
        })
    }
}

Pulizia dei limitatori

I vecchi limitatori per IP si accumulano in memoria. Li elimini con una goroutine in background che rimuove le voci a cui non si è avuto accesso negli ultimi N minuti.

Rate limiting distribuito

I limitatori in-process non funzionano tra più istanze. Utilizzi Redis e uno script con sliding window o token bucket per il rate limiting distribuito.

429 vs 503

Restituisca 429 Too Many Requests quando il singolo client è soggetto al rate limiting. Restituisca 503 Service Unavailable quando l'intero servizio è sovraccarico e sta riducendo il carico.

Combinare autenticazione e rate limiting

Li applichi come middleware separati nella catena. Prima l'autenticazione: limiti il rate solo degli utenti autenticati, così da distinguerli in base all'ID utente anziché all'IP.

Testare il middleware di autenticazione

Utilizzi httptest per passare token validi e non validi e verifichi che vengano impostati i codici di stato corretti e i valori nel context.

Verifica rapida

Quale codice di stato HTTP deve restituire un middleware di rate limiting quando un client supera il proprio limite?

Riepilogo: autenticazione e rate limiting

Punti chiave:

  • Middleware JWT: estrarre il token Bearer → analizzarlo → associare le claim al context
  • Limitare il rate per IP o utente con golang.org/x/time/rate
  • Restituire 429 e l'header Retry-After quando il limite viene superato
  • Per il funzionamento distribuito, utilizzare Redis per il rate limiting su più istanze

Domande Frequenti

La lezione «Middleware per autenticazione e limitazione della frequenza» è gratuita?

Sì — il testo completo di «Middleware per autenticazione e limitazione della frequenza» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «Middleware per autenticazione e limitazione della frequenza»?

Validazione dei JWT e rate limiting con token bucket Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Middleware per autenticazione e limitazione della frequenza»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Fondamenti della catena middleware HTTP
  2. Middleware per logging e ID della richiesta
  3. Middleware per autenticazione e limitazione della frequenza
  4. Middleware CORS e recupero dai panic
← Torna a Go Academy