Kimlik Doğrulama ve Güvenlik
EVDSOFT platformunda kullanılan kimlik doğrulama yöntemleri ve güvenlik uygulamaları.
Genel Bakış
EVDSOFT platformu, farklı senaryolar için farklı kimlik doğrulama yöntemleri kullanır:
1X-PLATFORM-KEY
Platform-service API'sine erişim için kullanılır. Her proje için benzersiz bir API anahtarıdır.
2JWT Tokenlar
Son kullanıcı kimlik doğrulaması için kullanılır. Auth-service tarafından üretilir.
3Service Tokenlar (Planlanan)
Servisler arası güvenli iletişim için kullanılacak dahili tokenlar.
X-PLATFORM-KEY
Platform-service API'sine yapılan tüm istekler X-PLATFORM-KEY header'ı gerektirir. Bu anahtar, projenizi tanımlar ve yetkilendirme sağlar.
# Platform API isteği
curl -X GET "https://platform.services.evdsoft.com/api/platform/projects" \
-H "X-PLATFORM-KEY: pk_live_abc123xyz789" \
-H "Content-Type: application/json"Anahtar Güvenliği
- Platform key'i asla istemci tarafında (tarayıcı, mobil uygulama) kullanmayın
- Sadece backend servislerinde, environment variable olarak saklayın
- Key'i git reposuna commit etmeyin, .env dosyalarını .gitignore'a ekleyin
JWT Doğrulama
Son kullanıcılar için auth-service JWT tokenlar üretir. Bu tokenlarAuthorization: Bearer header'ı ile gönderilir:
# JWT ile kimlik doğrulamalı istek
curl -X GET "https://auth.services.evdsoft.com/api/auth/me" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json"JWT token doğrulama örneği (Node.js):
1import jwt from 'jsonwebtoken';2 3interface JWTPayload {4 sub: string; // User ID5 email: string;6 projectId: string;7 iat: number;8 exp: number;9}10 11async function verifyToken(token: string, projectConfig: ProjectConfig): Promise<JWTPayload> {12 try {13 const payload = jwt.verify(token, projectConfig.authSettings.jwtSecret, {14 algorithms: ['HS256'],15 issuer: 'evdsoft-auth',16 }) as JWTPayload;17 18 // Token'ın bu projeye ait olduğunu doğrula19 if (payload.projectId !== projectConfig.project.id) {20 throw new Error('Token belongs to different project');21 }22 23 return payload;24 } catch (error) {25 throw new Error('Invalid token');26 }27}JWT Yapısı
sub: Kullanıcı ID'siemail: Kullanıcı e-posta adresiprojectId: Token'ın ait olduğu projeiat: Token oluşturma zamanıexp: Token geçerlilik süresi
Servisler Arası İletişim
Servisler birbirleriyle güvenli bir şekilde iletişim kurmalıdır. Bu amaçla service tokenlar planlanmaktadır:
// Servis-to-servis iletişim (planlanan)
const response = await fetch('https://mail.services.evdsoft.com/api/mail/send', {
method: 'POST',
headers: {
'X-SERVICE-TOKEN': process.env.SERVICE_TOKEN,
'X-PROJECT-ID': projectId,
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: 'user@example.com',
template: 'welcome',
data: { name: 'John' }
})
});Planlanan Özellik
Güvenlik Önerileri
Yapılması Gerekenler
- ✓API anahtarlarını environment variable olarak saklayın
- ✓HTTPS kullanın (tüm EVDSOFT servisleri HTTPS zorunludur)
- ✓JWT tokenları kısa ömürlü tutun, refresh token kullanın
- ✓Hata mesajlarında hassas bilgi döndürmeyin
- ✓Rate limiting uygulayın
Kaçınılması Gerekenler
- ✗API anahtarlarını istemci koduna gömmeyin
- ✗JWT secret'ı kod içinde hardcode etmeyin
- ✗Token'ları localStorage'da saklamaktan kaçının (XSS riski)
- ✗Şifreleri düz metin olarak saklamayın veya loglamayın