// docs / baas security / auth0 hardening
Auth0 güvenlik kontrol listesi: 22 madde
Auth0, devasa bir yüzeye sahip bir kimlik-hizmet-olarak platformudur — uygulamalar, API'lar (kaynak sunucular), kiracılar, action'lar, kurallar (eski), bağlantılar ve grant'ler. Bunlardan herhangi birinin yanlış yapılandırılması bir auth bypass'idir. Bu kontrol listesi, uygulamalar, callback / logout allowlist'leri, token'lar ve refresh rotasyonu, özel action'lar, RBAC, anomali algılama ve sürekli izleme konularında 22 maddelik bir denetimdir. Her madde Auth0 Dashboard'da 10 dakikadan kısa sürede doğrulanabilir.
Clerk'teki eşdeğer kontrol listesi için Clerk güvenlik kontrol listesi'ne bakın. Kimlik katmanı yanlış yapılandırmalarının neden yapay zeka aracı kör noktaları olduğuna dair arka plan için Yapay zeka kodlama araçları neden güvenlik açıkları bırakır bölümüne bakın.
Uygulama türü ve grant türleri
Uygulama türü ve etkinleştirilen grant türleri Auth0'daki en yüksek etkili ayarlardır. Bunları yanlış almak, hiçbir frontend kodunun kapatamayacağı saldırı sınıflarını açar.
- Tarayıcı yalnızca uygulamalar için Application Type = Single Page Application ve sunucu tarafında render edilen uygulamalar için Regular Web Application kullanın. Yanlış tür yanlış grant türlerine izin verir — örneğin SPA grant'i etkinleştirilmiş bir Regular Web App, token'ları URL fragment'leri aracılığıyla sızdıran PKCE'siz Implicit flow'u etkinleştirir.
- Her uygulamada Implicit grant türünü devre dışı bırakın. Dashboard → Application → Advanced Settings → Grant Types → Implicit'i işaretten çıkarın. Implicit flow token'ları URL fragment'lerinde döndürür, burada tarayıcı geçmişinde ve analizlerde loglanır. Bunun yerine PKCE ile Authorization Code kullanın.
- Belgelenmiş bir ihtiyacınız yoksa Password grant'i devre dışı bırakın. Resource Owner Password Credentials (ROPC) grant'i, kullanıcı parolalarını kendiniz işlemenizi gerektirir — Auth0'yu satın aldığınız çoğu şeyi boşa çıkarır. Bir eski sistem entegre etmiyorsanız devre dışı bırakın.
- Her public istemcide PKCE ile Authorization Code'u etkinleştirin. Dashboard → Advanced Settings → OAuth → JsonWebToken Signature Algorithm = RS256, OIDC Conformant = enabled. PKCE, mobil uygulamalar ve SPA'lar için kod ele geçirmeyi önlemek için gereklidir.
Callback ve logout URL allowlist'leri
OAuth callback yolundaki açık yönlendirmeler bir token-hırsızlığı primitive'idir. Auth0'nun allowlist'i tek savunmanızdır.
- Allowed Callback URLs'i tam üretim callback yolunuza ayarlayın — joker yok.
https://yourapp.com/*değil,https://yourapp.com/callback. Joker callback'ler saldırganların token'ları domain'inizdeki keyfi alt yollara yönlendirmesine izin verir. - Allowed Logout URLs'i sonlu bir listeye ayarlayın. Aynı kural: yalnızca açık URL'ler. Açık bir logout yönlendirmesi, saldırganların logout sonrası durumunuza benzeyen phishing sayfaları hazırlamasına izin verir.
- Allowed Web Origins'i yalnızca üretim origin'inize ayarlayın. Sessiz kimlik doğrulama için kullanılır (gizli iframe aracılığıyla token yenileme). Joker origin, saldırgan sayfalarının kiracınıza karşı sessiz auth yapmasına izin verir.
- API endpoint'leri için Allowed CORS origins'i ayarlayın, uygulama için değil. Tenant Settings → Advanced → Allowed CORS origins. Varsayılan boştur (kısıtlı); yalnızca kontrolünüzdeki açık origin'leri ekleyin.
Token'lar ve refresh rotasyonu
Token ömrü, refresh rotasyonu ve imzalama algoritması herhangi bir token sızıntısının patlama yarıçapına karar verir.
- Refresh Token Rotation'ı etkinleştirin. Application → Refresh Token Settings → Rotation. Her refresh yeni bir refresh token verir ve eskisini geçersizleştirir. Mutlak son kullanma ile birleştiğinde, bu token hırsızlığını sınırlar.
- Refresh Token Reuse Interval'ı 0'a (veya yeniden oynatma toleransınızın izin verdiği kadar düşük) ayarlayın. Yeniden kullanım aralığı, bir token'ın aynı pencerede iki kez kullanılmasına izin verir — onu korumak için belirli bir nedeniniz yoksa kapatın.
- Absolute Refresh Token Expiry'yi sonsuz değil, 14-30 güne ayarlayın. Application → Refresh Token Expiration → Absolute Expiration. Auth0 varsayılan olarak yalnızca Inactivity'dir, bu da boşta bir oturumun yıllarca sürmesi anlamına gelir.
- JWT Signature Algorithm'i RS256'ya ayarlayın. Application → Advanced → OAuth → JsonWebToken Signature Algorithm. RS256 asimetrik imzalama kullanır, böylece istemci token'ları sahteleyemez. İstemciye dönük uygulamalar için asla HS256 kullanmayın.
- API'nızın aldığı her JWT'de
audveissclaim'lerini doğrulayın. Sunucu tarafında resmi Auth0 SDK'sını kullanın — bunları otomatik olarak doğrular. Elle yazılmış JWT ayrıştırma genellikle audience doğrulamasını atlar, ki bu bir auth bypass'idir.
Action'lar ve özel kod
Auth0 Actions (ve eski Rules) sunucu tarafında oturum açma ve diğer yaşam döngüsü olaylarında çalışır. Tüm istek bağlamına erişimi vardır. Buradaki güvensiz kod, kiracı çapında bir güvenlik açığıdır.
event.userveyaevent.transaction'ı bir bütün nesne olarak asla loglamayın. Bunlar e-posta adresleri, IP adresleri ve diğer PII içerir. Yalnızca alan düzeyinde loglama kullanın ve yalnızca ihtiyacınız olanı loglayın.- Herhangi bir API anahtarı veya webhook URL'si için secret deposunu kullanın. Actions → Edit → Secrets. Action kodunda asla bir API anahtarını bir string literal olarak satır içi yapmayın — kod, kiracıda Action editör erişimi olan herkese görünür.
- Girdileri user_metadata veya app_metadata olarak saklamadan önce doğrulayın.
event.body.name'ıuser.user_metadata.display_name'a yazan self-service bir action, frontend'iniz o alanı kaçırmadan render ederse, depolanmış bir XSS vektörüdür.
RBAC ve kaynak sunucuları
Auth0 RBAC kullanıyorsanız, role-to-permission eşlemesi yetkilendirme katmanınızdır. Yanlış alın ve kimliği doğrulanmış herhangi bir kullanıcı admin endpoint'lerine erişebilir.
- Resource Server'ları (API'ları) Auth0 Dashboard'da açıkça tanımlayın, anında değil. Her API'nın bir tanımlayıcısı (
audience), scope'ları ve imzalama ayarları vardır. Kayıtlı bir API olmadan, tüm token'lar örtük "Auth0 Management API" için verilir — yanlış audience. - API başına izinleri yapılandırın ve bunları kodunuzda
scopeclaim'i ile gerektirin. Uygulama mantığınızda rol üyeliğini kontrol etmeyin; access token'da scope'ları kontrol edin. Scope'lar OAuth-native yetkilendirme mekanizmasıdır. - Gerekli rol / scope'a sahip olmayan kimliği doğrulanmış bir kullanıcının ayrıcalıklı endpoint'lere erişemediğini test edin. Normal bir kullanıcı olarak oturum açın,
POST /api/admin/users/delete'i çağırmayı deneyin. Yanıt403olmalıdır.
Anomali algılama ve kiracı logları
Auth0 yüksek sinyalli olaylar yayınlar. Bunları sadece bir log buffer'ında oturmak yerine ekibinizi uyarmak için ayarlayın.
- Attack Protection'ı etkinleştirin: Bot Detection, Brute Force, Suspicious IP Throttling. Dashboard → Security → Attack Protection. Her biri ücretsiz katmanlarda varsayılan olarak kapalıdır; üretim için hepsini açın.
- Kiracı loglarını bir SIEM'e veya uygulama loglarınıza akıtın. Dashboard → Monitoring → Streams. Auth0 çoğu planda logları 30 gün tutar; uzun vadeli saklama, kendi sisteminize bir akış gerektirir.
fcoa(başarısız etki alanlar arası auth) vefp(başarısız oturum açma) artışlarında uyarı verin. Kısa bir pencerede bunların patlaması credential stuffing'dir. Çağrı kanalınıza yönlendirin.
Sonraki adımlar
Üretim URL'nize karşı bir FixVibe taraması çalıştırın — baas.clerk-auth0 kontrolü JavaScript'te paketlenmiş Auth0 istemci secret'larını ve diğer kimlik sağlayıcı ifşa sınıflarını işaretler. Clerk'teki eşdeğer için Clerk güvenlik kontrol listesi'ne bakın. BaaS sağlayıcıları arasındaki şemsiye görünüm için BaaS yanlış yapılandırma tarayıcısı bölümünü okuyun.
