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-request.sh
# 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-request.sh
# 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):

verify-jwt.ts
1import jwt from 'jsonwebtoken';
2
3interface JWTPayload {
4 sub: string; // User ID
5 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ğrula
19 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ı

JWT payload'ı şunları içerir:
  • sub: Kullanıcı ID'si
  • email: Kullanıcı e-posta adresi
  • projectId: Token'ın ait olduğu proje
  • iat: 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:

service-to-service.ts
// 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

Service tokenlar henüz implementasyonda değildir. Şu anda servisler arası iletişim X-PLATFORM-KEY ile sağlanmaktadır.

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