Takip et

Node.js Uygulamalarında JWT Kimlik Doğrulaması İçin 9 Adım

Node.js Uygulamalarında JWT Kimlik Doğrulaması İçin 9 Adım

Node.js uygulamalarınızda güvenli kimlik doğrulaması için JWT (JSON Web Token) kullanmanın en yaygın ve popüler yöntemlerinden biri olduğunu biliyor muydunuz? JWT, kullanıcının kimlik bilgilerini güvenli bir şekilde iletmek ve doğrulamak için mükemmel bir çözümdür.

Bu makalede, Node.js uygulamalarınızda JWT kimlik doğrulaması uygulamak için adım adım bir rehber sunacağım. JWT’nin temellerini, nasıl çalıştığını ve kendi uygulamalarınızda nasıl kullanacağınızı adım adım göstereceğim. Hazır mısınız? Haydi başlayalım!

JWT Nedir?

JWT (JSON Web Token) kısaca, kullanıcının kimlik bilgilerini ve ek bilgileri güvenli bir şekilde temsil eden bir standarttır. Bir JWT, üç bölümden oluşur:

  • Başlık (Header): JWT türünü (JWT) ve kullanılan algoritmayı belirtir.
  • Yük (Payload): Kullanıcı hakkında bilgi içeren, şifrelenmemiş JSON verileridir. (Örneğin, kullanıcı adı, e-posta adresi, rol, vb.)
  • İmza (Signature): Başlık ve yükü şifreleyerek JWT’nin değiştirilmediğini garanti eder.

JWT’ler, uygulamalar arasında verileri güvenli bir şekilde paylaşmak için kullanılabilir. Bunlar, kullanıcı oturum açma işlemleri, yetkilendirme kontrolü ve API erişimi gibi birçok kullanım senaryosunda kullanışlıdır.

Node.js Uygulamalarında JWT Kimlik Doğrulaması

Şimdi Node.js uygulamalarında JWT kimlik doğrulaması uygulamak için 9 adıma daha yakından bakalım.

1. Proje Kurulumu

Yeni bir Node.js projesi oluşturun ve gerekli paketleri yükleyin:

“`bash
mkdir my-jwt-app
cd my-jwt-app
npm init -y
npm install express jsonwebtoken bcryptjs cors
“`

Bu komutlar:

  • express: Web uygulaması oluşturmak için bir çerçeve.
  • jsonwebtoken: JWT’ler oluşturmak ve doğrulamak için bir kütüphane.
  • bcryptjs: Parolaları güvenli bir şekilde şifrelemek için kullanılan bir kütüphane.
  • cors: Farklı kökenlerden gelen isteklere izin vermek için bir middleware.

2. Kullanıcı Modeli

Kullanıcı verilerini depolamak için bir model oluşturun (Örneğin, ‘user.js’):

“`javascript
const mongoose = require(‘mongoose’);
const Schema = mongoose.Schema;

const userSchema = new Schema({
username: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
}
});

module.exports = mongoose.model(‘User’, userSchema);
“`

3. Veritabanı Bağlantısı

Uygulamanızın kullanacağı veritabanına (MongoDB gibi) bağlanın.

“`javascript
const mongoose = require(‘mongoose’);
const mongoURI = ‘mongodb://localhost:27017/my-jwt-app’; // Veritabanı bağlantı bilgileri

mongoose.connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log(‘MongoDB bağlantısı başarılı.’))
.catch(err => console.error(‘MongoDB bağlantı hatası:’, err));
“`

4. Kayıt İşlemi

Yeni kullanıcıları veritabanına eklemek için bir kayıt (sign-up) rotası oluşturun:

“`javascript
const express = require(‘express’);
const router = express.Router();
const User = require(‘../models/user’);
const bcryptjs = require(‘bcryptjs’);

router.post(‘/signup’, async (req, res) => {
const { username, password } = req.body;

try {
// Kullanıcı adı zaten var mı kontrol edin
const existingUser = await User.findOne({ username });
if (existingUser) {
return res.status(400).json({ message: ‘Kullanıcı adı zaten kullanılıyor.’ });
}

// Parola şifreleyin
const hashedPassword = await bcryptjs.hash(password, 10);

// Yeni kullanıcıyı veritabanına kaydedin
const newUser = new User({ username, password: hashedPassword });
await newUser.save();

res.status(201).json({ message: ‘Kullanıcı başarıyla kaydedildi.’ });
} catch (err) {
console.error(err);
res.status(500).json({ message: ‘Bir hata oluştu.’ });
}
});

module.exports = router;
“`

5. Oturum Açma İşlemi

Kullanıcıları kimlik doğrulamak için bir oturum açma (sign-in) rotası oluşturun:

“`javascript
const express = require(‘express’);
const router = express.Router();
const User = require(‘../models/user’);
const bcryptjs = require(‘bcryptjs’);
const jwt = require(‘jsonwebtoken’);

router.post(‘/signin’, async (req, res) => {
const { username, password } = req.body;

try {
const user = await User.findOne({ username });
if (!user) {
return res.status(401).json({ message: ‘Geçersiz kullanıcı adı veya parola.’ });
}

// Parola doğrulamasını yapın
const isValidPassword = await bcryptjs.compare(password, user.password);
if (!isValidPassword) {
return res.status(401).json({ message: ‘Geçersiz kullanıcı adı veya parola.’ });
}

// JWT oluşturun
const token = jwt.sign({ userId: user._id }, ‘secret-key’, { expiresIn: ‘1h’ });

res.status(200).json({ token, message: ‘Oturum açma başarılı.’ });
} catch (err) {
console.error(err);
res.status(500).json({ message: ‘Bir hata oluştu.’ });
}
});

module.exports = router;
“`

6. JWT Middleware

JWT’yi doğrulamak için bir middleware oluşturun:

“`javascript
const express = require(‘express’);
const jwt = require(‘jsonwebtoken’);

const authMiddleware = (req, res, next) => {
const token = req.headers.authorization && req.headers.authorization.split(‘ ‘)[1];

if (!token) {
return res.status(401).json({ message: ‘Geçerli bir JWT tokeni sağlamalısınız.’ });
}

try {
const decoded = jwt.verify(token, ‘secret-key’);
req.user = decoded;
next();
} catch (err) {
console.error(err);
res.status(401).json({ message: ‘Geçersiz JWT tokeni.’ });
}
};

module.exports = authMiddleware;
“`

7. Korunan Rotalar

JWT middleware’ini kullanarak korunan rotalar oluşturun:

“`javascript
const express = require(‘express’);
const router = express.Router();
const authMiddleware = require(‘../middleware/auth’);

router.get(‘/protected’, authMiddleware, (req, res) => {
res.status(200).json({ message: ‘Bu bir korunan rota.’ });
});

module.exports = router;
“`

8. Uygulama Başlangıç

Uygulama sunucunuzu başlatın:

“`javascript
const express = require(‘express’);
const cors = require(‘cors’);
const signupRouter = require(‘./routes/signup’);
const signinRouter = require(‘./routes/signin’);
const protectedRouter = require(‘./routes/protected’);

const app = express();
app.use(cors());
app.use(express.json());

app.use(‘/api/v1/auth’, signupRouter);
app.use(‘/api/v1/auth’, signinRouter);
app.use(‘/api/v1/protected’, protectedRouter);

app.listen(3000, () => {
console.log(‘Sunucu 3000 portunda çalışıyor.’);
});
“`

9. Güvenlik Uygulamaları

JWT güvenliği için aşağıdaki hususlara dikkat etmek önemlidir:

  • Güçlü bir gizli anahtar kullanın: JWT’leri şifrelemek için uzun ve rastgele bir gizli anahtar kullanın. Bu anahtarı asla doğrudan kodunuzda saklamayın, güvenli bir ortamda saklayın.
  • JWT’leri doğru bir şekilde saklayın: JWT’leri istemci tarafında (tarayıcı) saklamak yerine, istemcinin JWT’yi sunucuya göndermesini sağlayacak bir güvenli mekanizma kullanın. JWT’leri güvenli çerezlerde veya yerel depolama alanında saklayabilirsiniz.
  • JWT’lere son kullanma tarihi ekleyin: JWT’lerin geçerliliğini sınırlamak için son kullanma tarihi ayarlayın. Bu, yetkisiz erişimi önlemeye yardımcı olur.
  • HTTP Only çerezleri kullanın: JWT’leri çerezlerde saklıyorsanız, HTTP Only çerezleri kullanın. Bu çerezlere JavaScript tarafından erişilmesini engeller.
  • JWT’leri şifreleyin: Özellikle hassas bilgiler içeriyorsa JWT’leri şifreleyin. JWT’leri şifrelemek, yetkisiz kişilerin içeriğini okumasını önler.

Sonuç

Bu makalede, Node.js uygulamalarınızda JWT kimlik doğrulaması uygulama adımlarını inceledik. JWT güvenliği için önemli ipuçlarını da ele aldık. JWT, güvenli ve etkili bir kimlik doğrulama mekanizmasıdır ve Node.js uygulamalarınızı geliştirmek için kullanabileceğiniz değerli bir araçtır.

JWT’ler hakkında daha fazla bilgi edinmek ve uygulamanız için en uygun şekilde nasıl kullanılacağını öğrenmek için JWT.io dokümantasyonuna göz atabilirsiniz.

Umarım bu makale size JWT kimlik doğrulaması hakkında temel bir anlayış kazandırmıştır. Eğer Node.js ve JWT hakkında daha fazla sorunuz varsa, fatihsoysal.com adresinden bana ulaşabilirsiniz.

#Etiketler: JWT, Node.js, Kimlik Doğrulaması, Güvenlik, JSON Web Token, Uygulama Geliştirme, Web Geliştirme, Fatih Soysal

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version