0Pricing
Go Academy · Ders

Kimlik Doğrulama ve Hız Sınırlama Ara Katmanı

JWT doğrulama ve belirteç kovası hız sınırlaması

Kimlik Doğrulama ve Hız Sınırlama Ara Katmanı, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

JWT kimlik doğrulama ara yazılımı

Authorization üst bilgisindeki JWT'yi çıkarın, ayrıştırın ve doğrulayın:

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))
        })
    }
}

API anahtarı kimlik doğrulaması

Bir üst bilgideki API anahtarını veritabanına veya bellekteki bir kümeye karşı doğrulayın:

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)
        })
    }
}

Belirteç kovası hız sınırlayıcısı

IP başına bir sınırlayıcı haritasıyla golang.org/x/time/rate kullanın:

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)
}

Hız sınırlama ara yazılımı

Ara yazılımda sınırlayıcıyı denetleyin ve sınır aşılırsa 429 döndürün:

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)
    })
}

Retry-After üst bilgisi

İstemcinin yeniden denemeden önce beklemesi gereken saniye sayısını belirten bir Retry-After üst bilgisi ekleyin:

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

Role dayalı erişim denetimi

Kimlik doğrulamasından sonra Next çağrılmadan önce kullanıcının bağlam taleplerindeki rollerini denetleyin:

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)
        })
    }
}

Sınırlayıcı temizliği

IP başına oluşturulan eski sınırlayıcılar bellekte birikir. Son N dakika içinde erişilmemiş girdileri silen bir arka plan goroutine'i ile bunları temizleyin.

Dağıtık hız sınırlama

İşlem içi sınırlayıcılar birden çok örnekte çalışmaz. Dağıtık hız sınırlama için Redis ile kayan pencere veya belirteç kovası betiği kullanın.

429 ve 503 karşılaştırması

Bireysel istemci hız sınırlamasına takıldığında 429 Çok Fazla İstek döndürün. Hizmetin tamamı aşırı yüklendiğinde ve yük azaltıldığında 503 Hizmet Kullanılamıyor döndürün.

Kimlik doğrulama ile hız sınırlamayı birleştirme

Bunları zincirde ayrı ara yazılımlar olarak uygulayın. Önce kimlik doğrulaması yapın: IP yerine kullanıcı kimliğine göre ayrım yapabilmek için hız sınırlamasını yalnızca kimliği doğrulanmış kullanıcılara uygulayın.

Kimlik doğrulama ara yazılımını sınama

Geçerli ve geçersiz belirteçleri iletmek ve doğru durum kodlarıyla bağlam değerlerinin ayarlandığını doğrulamak için httptest kullanın.

Hızlı kontrol

Bir istemci kendi sınırını aştığında hız sınırlama ara yazılımı hangi HTTP durum kodunu döndürmelidir?

Özet: Kimlik doğrulama ve hız sınırlama

Ana noktalar:

  • JWT ara yazılımı: Bearer belirtecini çıkarma → ayrıştırma → talepleri bağlama ekleme
  • IP veya kullanıcı başına hız sınırlaması için golang.org/x/time/rate kullanın
  • Sınır aşıldığında 429 ve Retry-After üst bilgisini döndürün
  • Dağıtık yapı: çok örnekli hız sınırlaması için Redis kullanın

Sıkça Sorulan Sorular

“Kimlik Doğrulama ve Hız Sınırlama Ara Katmanı” dersi ücretsiz mi?

Evet — “Kimlik Doğrulama ve Hız Sınırlama Ara Katmanı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Kimlik Doğrulama ve Hız Sınırlama Ara Katmanı” dersinde ne öğreneceğim?

JWT doğrulama ve belirteç kovası hız sınırlaması Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Kimlik Doğrulama ve Hız Sınırlama Ara Katmanı” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. HTTP Ara Katman Zincirinin Temelleri
  2. Günlükleme ve İstek Kimliği Ara Katmanı
  3. Kimlik Doğrulama ve Hız Sınırlama Ara Katmanı
  4. CORS ve Panic Kurtarma Ara Katmanı
← Go Academy Sayfasına Dön