Expressjs’te OAuth2 kullanımı ( Google OAuth2 )

Selim KURT
3 min readMar 15, 2024

--

OAuth2 , modern uygulamaların kimlik doğrulama ve yetkilendirme işlemlerini gerçekleştirmek için kullanılan bir protokoldür.OAuth2, özellikle üçüncü taraf uygulamaların kullanıcıların hesaplarına erişim yetkilendirmeleri için kullanılır.

OAuth2, 4 temel kavram etrafında incelenebilir.

  1. Resource Owner (Kaynak Sahibi): Resource Owner, genellikle bir kullanıcıdır. Bu kullanıcı, kaynaklarına (verilerine, hesaplarına vb.) erişimi olan kişidir.
  2. Client (İstemci): Client, kaynak sahibinin kaynaklarına erişmek isteyen uygulamadır. Örneğin, bir web sitesi veya mobil uygulama olabilir.
  3. Authorization Server (Yetkilendirme Sunucusu): Authorization Server, kaynak sahibinin kimliğini doğrulayan ve yetkilendirme belirten bir hizmettir. OAuth2, genellikle bu sunucuları kullanarak yetkilendirme işlemlerini gerçekleştirir.
  4. Resource Server (Kaynak Sunucusu): Resource Server, korunan kaynakları barındıran sunucudur. Bu, kullanıcının yetkilendirilmesi gereken verilerin bulunduğu yerdir.

OAuth2, 4 temel adımda inceleyebiliriz.

  1. Yetkilendirme (Authorization): İstemci, kaynak sahibinin kaynaklara erişmek istediğini belirtir ve kullanıcı yetkilendirme sunucusuna yönlendirilir. Bu adımda, kullanıcı istemcinin hangi kaynaklara erişebileceğini onaylar.
  2. Yetkilendirme Kodunun Alınması (Authorization Code Grant): Kullanıcı, yetkilendirme sunucusuna kimlik bilgileriyle giriş yapar ve yetkilendirme isteğini onaylar. Yetkilendirme sunucusu, bir yetkilendirme kodu (authorization code) oluşturur ve bu kodu istemciye iletilir.
  3. Erişim Tokeninin Alınması (Access Token Grant): İstemci, aldığı yetkilendirme kodunu kullanarak yetkilendirme sunucusundan bir erişim belirtecini (access token) alır. Bu erişim belirteci, istemcinin kaynak sunucusuna erişmek için kullanabileceği bir anahtardır.
  4. Kaynak Sunucusuna Erişim (Accessing Resource Server): İstemci, elde ettiği erişim belirteciyle kaynak sunucusuna erişim yapar. Kaynak sunucusu, erişim belirtecinin doğruluğunu kontrol eder ve kullanıcıya gerekli kaynakları sunar.

OAuth2 Kullanmanın Avantajları

Güvenlik: OAuth2, kullanıcıların kimlik bilgilerini doğrudan üçüncü taraf uygulama ile paylaşmadan erişim izni verilir.Bu, kullanıcıların kimlik bilgilerinin güvenliğini artırır.

Kullanıcı Dostu: Kullanıcılar, sık sık hesaplarına erişim vermek istediklerinde OAuth2 ile daha kullanıcı dostu bir deneyim yaşarlar. Tek seferlik yetkilendirme işlemleri sayesinde, tekrarlayan giriş bilgilerini hatırlama veya paylaşma ihtiyacı olmadan hizmetlere erişebilirler.

Yetkilendirme Kontrolü: OAuth2, kullanıcıların hangi verilere erişim vereceklerini ve hangi izinleri vereceklerini belirlemelerine olanak tanır. Bu durum, kullanıcıların gizliliklerini daha iyi kontrol etmelerini sağlar.

Geniş Kullanım Alanı: OAuth2, çok çeşitli platformlar ve hizmetler arasında kimlik doğrulama ve yetkilendirme sağlar. Uygulama geliştiricilerinin çeşitli entegrasyonlar yapmasını kolaylaştırır.

OAuth2 Kullanmanın Dezavantajları

Güvenlik Zaafları: OAuth2, doğru şekilde yapılandırılmadığında veya yanlış kullanıldığında güvenlik zaaflarına neden olabilir. Örneğin, güçlü bir kimlik doğrulama mekanizması olmayan uygulamalar, kötü niyetli kullanıcıların erişim yöntemleriyle ele geçirilebilir.

Karmaşıklık: OAuth2 protokolü, bazı geliştiriciler için karmaşık olabilir. Özellikle doğru şekilde yapılandırılması ve güvenlik önlemlerinin alınması gerektiğinden karmaşık gelebilir.

Erişim Kontrolü Zorlukları: Bazı durumlarda, OAuth2 yetkilendirme işlemleri, kullanıcıların hangi verilere erişebileceğini kontrol etmek için yetersiz olabilir. Uygulama geliştiricilerinin veri güvenliği ve gizliliği konusunda daha fazla dikkat etmeleri gerekmektedir.

Tek nokta arızaları: OAuth2, bir hizmet sağlayıcısının yetkilendirme sunucusunun veya bir uygulamanın erişim belirteçlerinin ele geçirilmesi durumunda tek nokta arızası riski taşır. Bu durum, tüm sistemde ciddi güvenlik açıklarına yol açabilir.

Şimdi Expressjs kullanarak Google Oauth2 entegrasyonu yapalım.

Öncelikle OAuth2 yetkilendirme işlemlerini kullanabilmek için password ve password-oauth2 paketlerini yükleyelim.

npm install password password-oauth2

Gerekli paketlerimizi kurduktan sonra işlemlerimize devam edebiliriz.

const express = require('express');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;

const app = express();

// Google OAuth 2.0 istemci kimliği ve sırrı
const GOOGLE_CLIENT_ID = 'your_google_client_id';
const GOOGLE_CLIENT_SECRET = 'your_google_client_secret';

// Google OAuth 2.0 stratejisi
passport.use(new GoogleStrategy({
clientID: GOOGLE_CLIENT_ID,
clientSecret: GOOGLE_CLIENT_SECRET,
callbackURL: '/auth/google/callback'
},
(accessToken, refreshToken, profile, done) => {
// Kullanıcı doğrulama ve işlemleri burada gerçekleştirilir
// Profil, Google'dan alınan kullanıcı profili bilgilerini içerir
return done(null, profile);
}
));

// Kullanıcı oturum yönetimi
passport.serializeUser((user, done) => {
done(null, user);
});

passport.deserializeUser((user, done) => {
done(null, user);
});

// Google OAuth 2.0 yetkilendirme rotası
app.get('/auth/google',
passport.authenticate('google', { scope: ['profile', 'email'] }));

app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
(req, res) => {
// Başarılı giriş durumunda yapılacak işlemler
res.redirect('/dashboard');
});

app.listen(3000, () => {
console.log('Server started on http://localhost:3000');
});

Yukarıdaki kodta, expressjs uygulamamızda Google OAuth2 yetkilendirme işlemlerini yaptık. Google OAuth2 prokolünü kullanarak kullanıcının uygulamaya ereişim yetkilendirme işlemini gerçekleştirdik. Aynı zamanda gerekli doğrulama işlemlerini de gerçekleştirdik. Başarılı işlem yaptığında gerekli endpoint’i de sağlamış olduk.

Okuduğunuz için teşekkürler

Her zaman gelişmek için yer olduğunu anlıyorum. Lütfen düşüncelerinizi paylaşmaktan çekinmeyin.

--

--

Selim KURT

Software Developer - Mobile & Web Developer #react #reactnative #nextjs #frontend #digitaltransformation #javascript