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
- HTTP Ara Katman Zincirinin Temelleri
- Günlükleme ve İstek Kimliği Ara Katmanı
- Kimlik Doğrulama ve Hız Sınırlama Ara Katmanı
- CORS ve Panic Kurtarma Ara Katmanı