Bu proje, .NET Core SignalR Hub'ı ve cookie tabanlı JWT authentication kullanan bir test uygulamasıdır.
- ✅ SignalR Hub ile real-time iletişim
- ✅ HttpOnly + Secure cookie ile JWT token yönetimi
- ✅ Cross-subdomain cookie desteği (
.example.com) - ✅ CORS yapılandırması (subdomain'ler için)
- ✅ Development ortamında localhost desteği (otomatik CORS ve cookie ayarları)
- ✅ Domain yapılandırması
appsettings.jsonüzerinden yönetilir - ✅ JWT Bearer authentication
- ✅ SignalR [Authorize] attribute ile koruma
- ✅ WebSocket ve Long Polling desteği
- ✅ Otomatik cookie gönderimi (browser tarafında)
SignalRCookieBaseAuth/
├── Program.cs # Ana yapılandırma ve middleware
├── Hubs/
│ └── ChatHub.cs # SignalR Hub sınıfı
├── wwwroot/
│ └── index.html # Test client HTML sayfası
├── appsettings.json # Yapılandırma dosyası
└── SignalRCookieBaseAuth.csproj # Proje dosyası
- .NET 8.0 SDK
- Modern web tarayıcısı (Chrome, Firefox, Edge)
dotnet restore
dotnet runUygulama şu adreslerde çalışacaktır:
- HTTPS:
https://localhost:5000 - HTTP:
http://localhost:5000
Tarayıcıda şu adreslerden birine gidin:
https://localhost:5000/index.html(önerilen)http://localhost:5000/index.htmlhttps://localhost:5000/(index.html otomatik yüklenecek)http://localhost:5000/
Test credentials:
- Username:
test - Password:
test123
Login yaptıktan sonra SignalR bağlantısı otomatik olarak kurulacaktır.
API Server (https://api.example.com)
appsettings.jsondosyasında domain ve JWT ayarlarını güncelleyin:
{
"Domain": {
"BaseDomain": "example.com",
"CookieDomain": ".example.com",
"CorsOrigins": [
"https://example.com",
"https://www.example.com",
"https://app.example.com",
"https://client.example.com"
]
},
"Jwt": {
"Secret": "GüçlüBirSecretKeyEnAz32Karakter!",
"Issuer": "https://api.example.com",
"Audience": "https://example.com"
}
}- Tüm domain ayarları
appsettings.jsonüzerinden yönetilir.Program.csiçinde manuel değişiklik yapmanıza gerek yoktur.
Client (https://app.example.com veya https://client.example.com)
wwwroot/index.htmldosyasındakiAPI_BASE_URLdeğişkeni otomatik olarak production domain'ini kullanır. Manuel değişiklik gerekmez:
const API_BASE_URL = window.location.origin.includes('localhost')
? window.location.origin // Development: aynı origin
: 'https://api.example.com'; // Production: API subdomain- HTML dosyasını statik bir web sunucusunda barındırın.
Cookie'ler şu özelliklere sahiptir:
- HttpOnly: JavaScript'ten erişilemez (güvenlik)
- Secure: Production'da sadece HTTPS üzerinden gönderilir (Development'ta HTTP için false olabilir)
- SameSite:
- Development:
Lax(HTTP uyumluluğu için) - Production:
None(Cross-site istekler için)
- Development:
- Domain:
- Development: Set edilmez (localhost özel bir domain)
- Production:
.example.com(tüm subdomain'lerde geçerli)
- Path=/ Tüm path'lerde geçerli
Not: Tüm cookie ayarları appsettings.json içindeki Domain yapılandırmasına göre otomatik olarak ayarlanır.
- Kullanıcı
/api/auth/loginendpoint'ine POST isteği gönderir - Backend JWT token oluşturur ve
access_tokenadlı cookie'ye set eder - Browser, tüm sonraki isteklerde (HTTP, WebSocket, Long Polling) cookie'yi otomatik gönderir
- JWT Bearer middleware cookie'den token'ı okur ve doğrular
- SignalR Hub [Authorize] attribute ile korunur
SendMessage(string user, string message)- Mesaj gönderirJoinGroup(string groupName)- Gruba katılırLeaveGroup(string groupName)- Gruptan ayrılır
ReceiveMessage- Yeni mesaj alındığındaUserConnected- Kullanıcı bağlandığındaUserDisconnected- Kullanıcı bağlantısı kesildiğinde
- Production'da mutlaka güçlü bir JWT Secret kullanın
- HTTPS kullanın (Secure cookie için zorunlu)
- CORS origin'lerini sadece gerekli domain'lerle sınırlandırın
- Gerçek kullanıcı doğrulaması için veritabanı entegrasyonu ekleyin
- Rate limiting ekleyin
- CSRF koruması düşünün (SameSite=None kullanıyorsanız)
-
Login Test:
- Yanlış credentials ile login deneyin
- Doğru credentials ile login yapın
- Cookie'nin set edildiğini kontrol edin (DevTools > Application > Cookies)
-
SignalR Connection Test:
- Login sonrası otomatik bağlantıyı kontrol edin
- Mesaj gönderip almayı test edin
- Bağlantıyı kesip otomatik reconnect'i test edin
-
Cross-Subdomain Test:
appsettings.jsoniçinde domain ayarlarını yapılandırın- API'yi
api.example.comüzerinde çalıştırın - Client'ı
app.example.comüzerinde çalıştırın - Cookie'nin her iki domain'de de çalıştığını doğrulayın
- Cookie domain'inin
.example.comolarak set edildiğini kontrol edin (DevTools > Application > Cookies)
- Development: HTTP kullanıyorsanız
Secure=falseolacaktır (normal) - Production: HTTPS kullanıldığından emin olun
- Cookie domain'inin doğru olduğunu kontrol edin (
appsettings.json>Domain:CookieDomain) - Localhost'ta cookie domain set edilmez (normal davranış)
credentials: 'include'vewithCredentials: trueayarlarının olduğunu doğrulayın
- Development: Localhost otomatik olarak izin verilir
- Production: Origin'in
appsettings.json>Domain:CorsOriginsiçinde tanımlı olduğunu kontrol edin AllowCredentials()metodunun çağrıldığını doğrulayın
- Cookie'nin set edildiğini kontrol edin
- JWT token'ın geçerli olduğunu doğrulayın
- Token expiration süresini kontrol edin
Bu proje test amaçlıdır.