```html
Kimlik Doğrulama, web uygulamalarını güvence altına almanın temel bir yönüdür ve kullanıcıların yalnızca yetkili oldukları kaynaklara ve verilere erişebilmelerini sağlar. Node.js ekosisteminde, Express, kimlik doğrulama uygulamasını basitleştiren popüler bir çerçevedir. Bu blog, temel kimlik doğrulama kavramlarını, Node.js ve Express uygulamalarında kullanılan yaygın yöntemleri ele alacak ve başlamanıza yardımcı olacak pratik örnekler sunacaktır.
Node.js Express Kimlik Doğrulamasına Giriş
Node.js Express kimlik doğrulaması, Express çerçevesiyle oluşturulmuş bir Node.js uygulamasına erişen kullanıcıların kimliğini doğrulamak için kullanılan yöntemleri ve uygulamaları ifade eder. Kimlik doğrulama, yalnızca yetkili kullanıcıların belirli kaynaklara erişebilmesini sağlayarak güvenlik sağlar ve hassas verileri korur.
Kimlik Doğrulama ve Yetkilendirme
- Kimlik Doğrulama: Bir kullanıcının kimliğini doğrulama süreci. "Sen kimsin?" sorusunu yanıtlar.
- Yetkilendirme: Kimliği doğrulanmış bir kullanıcının ne yapmasına izin verildiğini belirleme süreci. "Ne yapabilirsin?" sorusunu yanıtlar.
Durumsuz ve Durumlu Kimlik Doğrulama
- Durumsuz Kimlik Doğrulama: Sunucu herhangi bir oturum verisi tutmaz. Her istek bağımsızdır ve kimlik doğrulama için gerekli tüm bilgileri (örneğin, JWT) içermelidir.
- Durumlu Kimlik Doğrulama: Sunucu, kimliği doğrulanmış kullanıcılar için oturum verilerini genellikle bir veritabanında veya bellekte tutar. İstemci, depolanan oturum verilerine erişmek için bir oturum kimliği tutar.
Yaygın Node.js Express Kimlik Doğrulama Yöntemleri
1. Temel Kimlik Doğrulama
- Açıklama: Kullanıcılar, her istek için kullanıcı adlarını ve parolalarını sağlar.
- Kullanım Durumu: Basit ve hızlı uygulanır, temel uygulamalar veya dahili araçlar için uygundur.
- Örnek Kütüphaneler: Belirli bir kütüphane gerekmez, base64 kodlama ve kod çözme kullanılarak uygulanır.
2. Token Tabanlı Kimlik Doğrulama (JWT)
- Açıklama: Kullanıcılar, oturum açtıktan sonra bir JSON Web Token (JWT) alarak kimlik doğrulaması yapar ve bunu sonraki isteklerin başlığına dahil ederler.
- Kullanım Durumu: Durumsuz kimlik doğrulama, modern web ve mobil uygulamalarda yaygın olarak kullanılır.
- Örnek Kütüphaneler:
jsonwebtoken
,express-jwt
3. Oturum Tabanlı Kimlik Doğrulama
- Açıklama: Kullanıcı kimlik bilgileri, oturum açtıktan sonra sunucuda bir oturumda saklanır. Oturum kimliği, istemci tarafında bir çerezde saklanır.
- Kullanım Durumu: Sunucu tarafı oturumların yönetilebilir olduğu geleneksel web uygulamaları.
- Örnek Kütüphaneler:
express-session
,connect-mongo
4. OAuth2
- Açıklama: Üçüncü taraf hizmetlerin kullanıcı adına token alışverişinde bulunmasına izin veren yetkilendirme çerçevesi.
- Kullanım Durumu: Kimlik doğrulama için Google, Facebook ve GitHub gibi üçüncü taraf hizmetlerle entegrasyon.
- Örnek Kütüphaneler:
passport
,passport-google-oauth20
,passport-facebook
,passport-github
5. Sosyal Giriş
- Açıklama: Google, Facebook veya Twitter gibi sosyal medya hesapları aracılığıyla kimlik doğrulama.
- Kullanım Durumu: Kullanıcıların oturum açma sürecini basitleştirerek sosyal medya hesaplarını kullanarak oturum açmalarına olanak tanır.
- Örnek Kütüphaneler:
passport-google-oauth20
,passport-facebook
,passport-twitter
6. Çok Faktörlü Kimlik Doğrulama (MFA)
- Açıklama: Birden fazla doğrulama biçimi (örneğin, parola + OTP) gerektirerek ek bir güvenlik katmanı ekler.
- Kullanım Durumu: Ek kimlik doğrulama katmanlarının gerekli olduğu yüksek güvenlikli uygulamalar.
- Örnek Kütüphaneler:
speakeasy
(OTP oluşturma için),node-2fa
7. API Anahtar Kimlik Doğrulaması
- Açıklama: Kullanıcılar, her API çağrısı için istek başlığına bir API anahtarı ekler.
- Kullanım Durumu: Hizmetten hizmete iletişim veya genel API'ler için yaygın olarak kullanılır.
- Örnek Kütüphaneler: Belirli bir kütüphane gerekmez, istek başlığındaki API anahtarı kontrol edilerek uygulanır.
8. LDAP Kimlik Doğrulaması
- Açıklama: Kullanıcıların Microsoft Active Directory gibi bir dizin hizmetine karşı kimlik doğrulaması yapar.
- Kullanım Durumu: Merkezi kimlik doğrulamanın gerekli olduğu kurumsal uygulamalar.
- Örnek Kütüphaneler:
passport-ldapauth
,ldapjs
9. SAML Kimlik Doğrulaması
- Açıklama: Güvenlik Bildirimi İşaretleme Dili (SAML), taraflar arasında kimlik doğrulama ve yetkilendirme verilerini değiştirmek için XML tabanlı bir protokoldür.
- Kullanım Durumu: Kurumsal tek oturum açma (SSO) çözümleri.
- Örnek Kütüphaneler:
passport-saml
Doğru Node.js Express Kimlik Doğrulama Yöntemlerini Nasıl Seçersiniz?
Node.js Express uygulamanız için doğru kimlik doğrulama yöntemini seçmek, güvenlik gereksinimleri, kullanıcı deneyimi ve uygulamanızın özel kullanım durumları dahil olmak üzere çeşitli faktörlere bağlıdır. İşte her kimlik doğrulama yöntemini ne zaman kullanacağınıza dair bir rehber:
1. Temel Kimlik Doğrulama
Ne Zaman Kullanılır:
- Dahili Araçlar veya Prototipler: Güvenliğin büyük bir endişe olmadığı basit projeler.
- Hızlı ve Kolay Kurulum: Minimum kurulum ve karmaşıklık gerektiren senaryolar.
Artıları:
- Uygulaması basit.
- Ek kütüphanelere gerek yok.
Eksileri:
- Hassas veriler için güvenli değil (kimlik bilgileri base64 ile kodlanmıştır, şifrelenmemiştir).
- Biraz güvenli olmak için HTTPS gerektirir.
2. Token Tabanlı Kimlik Doğrulama (JWT)
Ne Zaman Kullanılır:
- Tek Sayfalı Uygulamalar (SPA'lar): React, Angular veya Vue.js gibi ön uç çerçevelere sahip modern web uygulamaları.
- Mobil Uygulamalar: Durumsuz kimlik doğrulamanın faydalı olduğu mobil uygulamalar için API'ler.
- Mikro hizmetler Mimarisi: Her hizmetin token'ı bağımsız olarak doğrulayabileceği dağıtılmış sistemler.
Artıları:
- Durumsuz, sunucu tarafı oturum depolama gerekmez.
- Farklı alanlarda kolayca kullanılabilir.
Eksileri:
- İstemci tarafında token depolama zor olabilir (localStorage, çerezler vb.).
- Token'ları iptal etmek karmaşık olabilir.
3. Oturum Tabanlı Kimlik Doğrulama
Ne Zaman Kullanılır:
- Geleneksel Web Uygulamaları: Sunucu tarafı oluşturmanın kullanıldığı web siteleri.
- Kalıcı Oturumları Olan Uygulamalar: Kullanıcı deneyiminin bir oturum durumunu korumaktan fayda sağladığı yerler.
Artıları:
- Merkezi oturum yönetimi.
- Express gibi çerçevelerle uygulaması ve yönetmesi daha kolaydır.
Eksileri:
- Sunucu tarafı depolama gerektirir (bellekte, veritabanında vb.).
- Sunucu tarafı durumu nedeniyle daha az ölçeklenebilir.
4. OAuth2
Ne Zaman Kullanılır:
- Üçüncü Taraf Entegrasyonları: Google, Facebook, GitHub vb. gibi hizmetlerden kullanıcı verilerine erişmesi gereken uygulamalar.
- Devredilmiş Yetkilendirme: Kullanıcıların başka bir hizmetteki kaynaklarına erişim izni vermesini istediğinizde.
Artıları:
- Güvenli ve yaygın olarak benimsenmiştir.
- Parola paylaşmadan üçüncü taraf erişimine izin verir.
Eksileri:
- Karmaşık kurulum ve uygulama.
- Üçüncü taraf sağlayıcılara bağımlılık.
5. Sosyal Giriş
Ne Zaman Kullanılır:
- Tüketiciye Yönelik Uygulamalar: Kayıt ve oturum açma sürecini basitleştirmek kullanıcı deneyimini geliştiren uygulamalar.
- Kullanıcı Kolaylığı: Kullanıcıların mevcut sosyal medya hesaplarından yararlanarak sürtünmeyi azaltmak istediğinizde.
Artıları:
- Kullanıcılar için oturum açmayı basitleştirir.
- Parola yönetimi yükünü azaltır.
Eksileri:
- Sosyal medya sağlayıcılarına bağımlılık.
- Kullanıcılardan olası gizlilik endişeleri.
6. Çok Faktörlü Kimlik Doğrulama (MFA)
Ne Zaman Kullanılır:
- Yüksek Güvenlikli Uygulamalar: Güvenliğin kritik olduğu bankacılık, finansal hizmetler, sağlık hizmetleri ve diğer uygulamalar.
- Uygunluk Gereksinimleri: Gelişmiş güvenlik için düzenleyici gereksinimleri olan endüstriler.
Artıları:
- Güvenliği önemli ölçüde artırır.
- Sağlam kimlik doğrulama için diğer yöntemlerle birleştirilebilir.
Eksileri:
- Uygulaması ve yönetimi daha karmaşıktır.
- Ek adımlar nedeniyle kullanıcı deneyimini etkileyebilir.
7. API Anahtar Kimlik Doğrulaması
Ne Zaman Kullanılır:
- Hizmetten Hizmete İletişim: Farklı hizmetlerin birbirini doğrulaması gereken dahili API'ler.
- Genel API'ler: Üçüncü taraf geliştiricilere erişim sağlarken.
Artıları:
- Uygulaması ve kullanımı basittir.
- Kolayca iptal edilebilir ve yönetilebilir.
Eksileri:
- Daha az güvenli (API anahtarları sızdırılabilir).
- Kullanıcıya özel bağlam yok, sadece hizmet düzeyi kimlik doğrulaması.
8. LDAP Kimlik Doğrulaması
Ne Zaman Kullanılır:
- Kurumsal Uygulamalar: Active Directory gibi merkezi kullanıcı dizinlerine sahip büyük kuruluşlar.
- Dahili Araçlar: Çalışanların kimlik bilgilerinin kurumsal bir dizine karşı doğrulanması gerektiği yerler.
Artıları:
- Merkezi kullanıcı yönetimi.
- Mevcut kurumsal altyapıyla iyi entegre olur.
Eksileri:
- LDAP sunucu kurulumu ve yönetimi gerektirir.
- Uygulaması ve hata ayıklaması karmaşık olabilir.
9. SAML Kimlik Doğrulaması
Ne Zaman Kullanılır:
- Kurumsal Tek Oturum Açma (SSO): Kurumsal SSO çözümleriyle entegre olurken.
- Federasyon Kimliği Gerektiren Uygulamalar: Kullanıcı kimlik doğrulamasının birden fazla etki alanında birleştirilmesi gerektiği yerler.
Artıları:
- Güvenli ve standartlaştırılmış.
- Birden fazla uygulamada SSO'yu kolaylaştırır.
Eksileri:
- Karmaşık kurulum ve yapılandırma.
- Tipik olarak daha fazla altyapı gerektirir.
Kimlik Doğrulama Yöntemlerini Seçmeye İlişkin Kısa Bir Özet
Node.js Express uygulamanız için doğru kimlik doğrulama yöntemini seçmek, mevcut farklı seçenekleri anlamayı ve bunları uygulamanızın özel gereksinimlerine göre değerlendirmeyi içerir.
Temel Kimlik Doğrulama: Kritik olmayan uygulamalar için hızlı ve basit.
Token Tabanlı Kimlik Doğrulama (JWT): SPA'lar, mobil uygulamalar ve mikro hizmetler için idealdir.
Oturum Tabanlı Kimlik Doğrulama: Geleneksel web uygulamaları için uygundur.
OAuth2: Üçüncü taraf entegrasyonları ve devredilmiş erişim için en iyisidir.
Sosyal Giriş: Kullanıcı deneyimini iyileştirmek için tüketiciye yönelik uygulamalar için harika.
Çok Faktörlü Kimlik Doğrulama (MFA): Yüksek güvenlikli uygulamalar için gereklidir.
API Anahtar Kimlik Doğrulaması: Hizmetten hizmete iletişim ve genel API'ler için kullanışlıdır.
LDAP Kimlik Doğrulaması: Merkezi kullanıcı yönetimi olan kurumsal uygulamalar için uygundur.
SAML Kimlik Doğrulaması: Kurumsal SSO ve federasyon kimlik sistemleri için kullanılır.
Doğru yöntemi seçmek, uygulamanızın özel ihtiyaçlarına, güvenlik gereksinimlerine ve kullanıcı deneyimi hususlarına bağlıdır.
Node.js Express Kimlik Doğrulama Örnekleri
Kimlik doğrulama, kullanıcıların kaynaklara güvenli bir şekilde erişebilmesini sağlamak için herhangi bir web uygulamasının kritik bir parçasıdır. Bir Node.js Express uygulamasında kimlik doğrulamanın nasıl uygulanacağına dair çeşitli örnekleri inceleyelim. En yaygın yöntemlerden bazılarını ele alacağız: JWT (JSON Web Token'lar), oturum tabanlı kimlik doğrulama, OAuth2 ve API anahtarları.
1. JWT (JSON Web Token'lar) Kimlik Doğrulaması
JWT, taraflar arasında bir JSON nesnesi olarak güvenli bir şekilde bilgi iletmenize olanak tanıyan, durumsuz bir kimlik doğrulama yöntemidir. Bu bilgiler dijital olarak imzalandığı için doğrulanabilir ve güvenilirdir.
Uygulama Adımları:
Adım 1: Projenizi Kurun
İlk olarak, yeni bir proje oluşturun ve gerekli bağımlılıkları yükleyin:
mkdir jwt-auth-example
cd jwt-auth-example
npm init -y
npm install express jsonwebtoken body-parser bcryptjs
Adım 2: Express Sunucusunu Oluşturun
Bir app.js
dosyası oluşturun ve temel bir Express sunucusu kurun:
const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const bcrypt = require('bcryptjs');
const app = express();
app.use(bodyParser.json());
const SECRET_KEY = 'your_jwt_secret';
// Mock User Data
const users = [{ id: 1, username: 'user1', password: bcrypt.hashSync('password1', 8) }];
app.post('/login', (req, res) => {
const { username, password } = req.body;
const user = users.find(u => u.username === username);
if (user && bcrypt.compareSync(password, user.password)) {
const token = jwt.sign({ id: user.id, username: user.username }, SECRET_KEY, { expiresIn: '1h' });
res.json({ token });
} else {
res.status(401).send('Invalid credentials');
}
});
const authenticateJWT = (req, res, next) => {
const token = req.headers.authorization;
if (token) {
jwt.verify(token, SECRET_KEY, (err, user) => {
if (err) {
return res.sendStatus(403);
}
req.user = user;
next();
});
} else {
res.sendStatus(401);
}
};
app.get('/protected', authenticateJWT, (req, res) => {
res.send(`Hello ${req.user.username}, you have accessed a protected route!`);
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
2. Oturum Tabanlı Kimlik Doğrulama
Oturum tabanlı kimlik doğrulama, oturum verilerini sunucu tarafında saklamaya dayanır. Bu yöntem durum bilgisidir ve geleneksel web uygulamalarında yaygın olarak kullanılır.
Uygulama Adımları:
Adım 1: Projenizi Kurun
Yeni bir proje oluşturun ve gerekli bağımlılıkları yükleyin:
mkdir session-auth-example
cd session-auth-example
npm init -y
npm install express express-session body-parser bcryptjs
Adım 2: Express Sunucusunu Oluşturun
Bir app.js
dosyası oluşturun ve temel bir Express sunucusu kurun:
const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const bcrypt = require('bcryptjs');
const app = express();
app.use(bodyParser.json());
app.use(session({ secret: 'your_session_secret', resave: false, saveUninitialized: true }));
const users = [{ id: 1, username: 'user1', password: bcrypt.hashSync('password1', 8) }];
app.post('/login', (req, res) => {
const { username, password } = req.body;
const user = users.find(u => u.username === username);
if (user && bcrypt.compareSync(password, user.password)) {
req.session.userId = user.id;
res.send('Logged in');
} else {
res.status(401).send('Invalid credentials');
}
});
const authenticateSession = (req, res, next) => {
if (req.session.userId) {
next();
} else {
res.sendStatus(401);
}
};
app.get('/protected', authenticateSession, (req, res) => {
const user = users.find(u => u.id === req.session.userId);
res.send(`Hello ${user.username}, you have accessed a protected route!`);
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
3. OAuth2 Kimlik Doğrulaması
OAuth2, üçüncü taraf uygulamaların kullanıcı kimlik bilgilerini ifşa etmeden kullanıcı kaynaklarına erişmesine izin veren daha karmaşık bir kimlik doğrulama yöntemidir. Sosyal oturum açma ve diğer hizmetlerle entegrasyon için yaygın olarak kullanılır.
Uygulama Adımları:
OAuth2'yi uygulamak genellikle OAuth2 akışını işleyen bir kütüphane veya çerçeve kullanmayı içerir. Basitlik için, passport
kütüphanesini passport-google-oauth20
gibi bir stratejiyle kullanacağız.
Adım 1: Projenizi Kurun
Yeni bir proje oluşturun ve gerekli bağımlılıkları yükleyin:
mkdir oauth2-auth-example
cd oauth2-auth-example
npm init -y
npm install express passport passport-google-oauth20 express-session
Adım 2: Express Sunucusunu Oluşturun
Bir app.js
dosyası oluşturun ve temel bir Express sunucusu kurun:
const express = require('express');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const session = require('express-session');
const app = express();
app.use(session({ secret: 'your_session_secret', resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new GoogleStrategy({
clientID: 'YOUR_GOOGLE_CLIENT_ID',
clientSecret: 'YOUR_GOOGLE_CLIENT_SECRET',
callbackURL: 'http://localhost:3000/auth/google/callback'
}, (accessToken, refreshToken, profile, done) => {
// In a real application, you would save the profile info to your database
return done(null, profile);
}));
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((obj, done) => {
done(null, obj);
});
app.get('/auth/google', passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login'] }));
app.get('/auth/google/callback', passport.authenticate('google', { failureRedirect: '/' }), (req, res) => {
res.redirect('/protected');
});
const ensureAuthenticated = (req, res, next) => {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/');
};
app.get('/protected', ensureAuthenticated, (req, res) => {
res.send(`Hello ${req.user.displayName}, you have accessed a protected route!`);
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
4. API Anahtar Kimlik Doğrulaması
API anahtar kimlik doğrulaması basittir ve genellikle sunucudan sunucuya iletişim için kullanılır. İstemciyi doğrulamak için her istekte bir anahtar geçirmeyi içerir.
Uygulama Adımları
Adım 1: Projenizi Kurun
Yeni bir proje oluşturun ve gerekli bağımlılıkları yükleyin:
mkdir api-key-auth-example
cd api-key-auth-example
npm init -y
npm install express
Adım 2: Express Sunucusunu Oluşturun
Bir app.js
dosyası oluşturun ve temel bir Express sunucusu kurun:
const express = require('express');
const app = express();
const API_KEY = 'your_api_key';
const authenticateApiKey = (req, res, next) => {
const apiKey = req.headers['x-api-key'];
if (apiKey && apiKey === API_KEY) {
next();
} else {
res.sendStatus(401);
}
};
app.get('/protected', authenticateApiKey, (req, res) => {
res.send('Access granted to protected route');
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Durumsuz JWT kimlik doğrulamasından geleneksel oturum tabanlı kimlik doğrulamasına ve üçüncü taraf entegrasyonları için OAuth2'ye kadar, uygulamanızın gereksinimlerine göre aralarından seçim yapabileceğiniz çeşitli yöntemleriniz vardır. Bu yöntemleri anlamak ve doğru bir şekilde uygulamak, güvenli ve ölçeklenebilir uygulamalar oluşturmanıza yardımcı olacaktır.
Nodejs Express Kimlik Doğrulaması İçin 10 En İyi Uygulama
Bir Node.js Express uygulamasında kimlik doğrulama uygulamak, güvenlik, ölçeklenebilirlik ve kullanım kolaylığını sağlamak için dikkatli bir değerlendirme gerektirir. Node.js Express uygulamalarınızda kimlik doğrulamayı işlerken izlenecek bazı en iyi uygulamalar şunlardır:
1. Güçlü Parola Karma Kullanın
- Parolaları Karma: Parolaları her zaman veritabanında saklamadan önce karma yapın. Bcrypt gibi sağlam bir karma algoritması kullanın.
- Parolaları Tuzlayın: Gökkuşağı tablosu saldırılarını önlemek için her parolaya benzersiz bir tuz ekleyin.
const bcrypt = require('bcryptjs');
const hashPassword = async (password) => {
const salt = await bcrypt.genSalt(10);
return await bcrypt.hash(password, salt);
};
2. JWT Token'larını Güvenceye Alın
- Gizli Anahtarları Güvende Tutun: Gizli anahtarları kaynak kodunuzda değil, ortam değişkenlerinde saklayın.
- Sona Erme Süresi Ayarlayın: Geçerlilik sürelerini sınırlamak için JWT'ler için her zaman bir sona erme süresi ayarlayın.
- Güçlü Algoritmalar Kullanın: Güçlü bir imzalama algoritması kullanın (örneğin, HS256).
const jwt = require('jsonwebtoken');
const SECRET_KEY = process.env.SECRET_KEY;
const token = jwt.sign({ userId: user.id }, SECRET_KEY, { expiresIn: '1h' });
3. HTTPS Kullanın
- Trafiği Şifreleyin: İstemci ve sunucu arasında iletilen verileri her zaman şifrelemek için HTTPS kullanın, ortadaki adam saldırılarına karşı koruma sağlayın.
4. Girişi Doğrulayın
- Temizleyin ve Doğrulayın: Enjeksiyon saldırılarını önlemek için kullanıcı girişlerini temizlemek ve doğrulamak için Joi veya express-validator gibi kütüphaneler kullanın.
const { body, validationResult } = require('express-validator');
app.post('/register', [
body('email').isEmail(),
body('password').isLength({ min: 6 })
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
// Proceed with registration
});
5. Hız Sınırlaması Uygulayın
- Kaba Kuvvet Saldırılarını Önleyin: Bir istemcinin kimlik doğrulama uç noktalarını yapabileceği istek sayısını sınırlamak için hız sınırlaması kullanın.
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // limit each IP to 100 requests per windowMs
});
app.use('/login', limiter);
6. Token'ları Güvenli Bir Şekilde Saklayın
- Güvenli Çerezler Kullanın: JWT'leri JavaScript'ten erişimi engellemek için güvenli, HTTP'ye özel çerezlerde saklayın (XSS saldırılarına karşı koruma sağlayın).
- Yenileme Token'ları: Kullanıcıların yeniden kimlik doğrulaması yapmadan yeni erişim token'ları almasına izin vermek için yenileme token'ları uygulayın.
7. Uygun Oturum Yönetimi Uygulayın
- Token'ları Geçersiz Kılın: Token'ların yeniden kullanılmasını önlemek için oturum kapatmada token geçersiz kılma uygulayın.
- Oturum Süresi Dolumu: Oturumların belirli bir hareketsizlik süresinden sonra sona ermesini sağlayın.
8. Korumalı Rotalar İçin Ara Katman Yazılımı Kullanın
- Kimlik Doğrulama Mantığını Merkezileştirin: Korumalı rotalar için kimlik doğrulama mantığını işlemek için ara katman yazılımı kullanın.
const authenticateJWT = (req, res, next) => {
const token = req.headers.authorization;
if (!token) {
return res.sendStatus(401);
}
jwt.verify(token, SECRET_KEY, (err, user) => {
if (err) {
return res.sendStatus(403);
}
req.user = user;
next();
});
};
app.get('/protected', authenticateJWT, (req, res) => {
res.send('This is a protected route');
});
9. Kimlik Doğrulama Olaylarını İzleyin ve Günlüğe Kaydedin
- Şüpheli Etkinliği Günlüğe Kaydedin: Şüpheli etkinlikleri tespit etmek ve bunlara yanıt vermek için kimlik doğrulamayla ilgili olayları izleyin ve günlüğe kaydedin.
- Denetim Günlükleri: Kullanıcı oturum açma girişimleri, hesap değişiklikleri ve diğer kritik eylemler için denetim günlüklerini tutun.
10. Bağımlılıkları Düzenli Olarak Güncelleyin
- Kütüphaneleri Güncel Tutun: Güvenlik yamalarından ve geliştirmelerden yararlanmak için bağımlılıklarınızı düzenli olarak güncelleyin.
- Bağımlılıkları Denetleyin: Bağımlılıklarınızdaki güvenlik açıklarını belirlemek ve düzeltmek için npm audit gibi araçlar kullanın.
Nodejs Express Kimlik Doğrulama Yöntemleriyle API'leri Test Etmek İçin Apidog'dan Yararlanma
Apidog, tüm geliştirme sürecini kolaylaştıran kapsamlı bir API geliştirme