iToverDose/Yazılım· 23 NISAN 2026 · 10:22

AWS Cognito’yu Google Entegrasyonuna Zorlamak: Konuk UI Olmadan Çözüm

AWS konsol erişimi kısıtlı ve Google ile entegrasyon zorunluysa, Cognito’nun yerleşik arayüzüne bağımlı kalmadan nasıl bir kullanıcı akışı oluşturabilirsiniz? İşte NestJS tabanlı bir projede yaşanan gerçek bir senaryonun ardındaki teknik detaylar.

DEV Community4 dk okuma0 Yorumlar

AWS Cognito’nun kullanıcı yönetimi ve kimlik doğrulama süreçleri genellikle basit entegrasyonlar için tasarlanmıştır. Ancak projelerinizde konsol erişiminizin olmadığı, yerleşik arayüzleri kullanamayacağınız veya özel bir akışa ihtiyaç duyduğunuz durumlar ortaya çıkabilir. Bu gibi senaryolarda, standart federasyon yöntemlerinin dışına çıkmak zorunda kalabilirsiniz.

AWS Konsoluna Erişim Olmadan Kimlik Doğrulama Yapmak: Gerçek Bir Kısıtlama

Geçtiğimiz dönemde, NestJS tabanlı bir arka uç sistemi üzerinde çalışırken karşılaştığımız bir sorunla karşılaştık: AWS konsoluna doğrudan erişimimiz yoktu. Her yapılandırma değişikliği için yöneticimizle birlikte hareket etmek zorundaydık. Bu basit kısıtlama, hata ayıklama sürecini tamamen farklı bir boyuta taşıyordu. Herhangi bir ayarı kontrol etmek için bile onay almak gerekiyordu.

Bu durumun yanı sıra, projemizin en önemli gereksinimlerinden biri de Google ile entegrasyondu. Kullanıcılar için kendi tasarımımızda bir "Google ile Oturum Aç" butonu sunmamız gerekiyordu. Ancak Cognito’nun standart federasyon akışı, tamamen AWS tarafından yönetilen yerleşik bir arayüz kullanımını zorunlu kılıyordu. Bu da projelerimizdeki özgürlüğü ciddi şekilde kısıtlıyordu.

Cognito’nun Standart Federasyon Akışına Alternatif: Sunucu Tarafı Entegrasyon

Cognito’nun yerleşik arayüzüne bağımlı kalmadan Google ile entegrasyon yapmanın mümkün olup olmadığını araştırmaya başladık. Standart yöntemde, Google’ı bir kimlik sağlayıcı olarak eklemek için AWS konsoluna erişim ve Cognito’nun yerleşik OAuth akışını kullanmak gerekiyor. Ancak bu seçenekler hem erişim kısıtlaması hem de tasarım esnekliği açısından uygun değildi.

İşte o noktada, Google kimlik token’larını sunucu tarafında doğrulama fikri aklımıza geldi. Google, kullanıcıların kimlik bilgilerini zaten doğrulamıştı. Bu da bize, kullanıcıyı tekrar doğrulama zorunluluğunu ortadan kaldırıyordu. Google’ın token’ını sunucu tarafında doğrulayarak, kullanıcı verilerini güvenle alabilir ve doğrudan Cognito kullanıcı havuzuna ekleyebilirdik.

Google Token’larını Sunucu Tarafında Doğrulama ve Cognito’ya Aktarma

Google’ın sunduğu google-auth-library kütüphanesi, sunucu tarafında token doğrulama işlemini kolaylaştırıyor. Bu kütüphane sayesinde, gelen token’ın doğrulanmasını ve içindeki kullanıcı bilgilerinin çıkarılmasını sağlayabiliyoruz. Örneğin, aşağıdaki kod parçası, Google token’ını doğrulama ve kullanıcı verilerini elde etme sürecini özetliyor:

async verifyGoogleToken(googleToken: string) {
  try {
    const ticket = await this.googleClient.verifyIdToken({
      idToken: googleToken,
      audience: process.env.GOOGLE_CLIENT_ID,
    });
    return ticket.getPayload();
  } catch (error) {
    throw new BadRequestException('Geçersiz Google token');
  }
}

Bu işlem sırasında, token’ın imzası Google’ın genel anahtarlarıyla doğrulanıyor, hedef kitle (audience) doğrulanıyor ve token’ın süresi kontrol ediliyor. Eğer herhangi bir doğrulama hatası oluşursa, token reddediliyor ve kullanıcıya "Geçersiz Google token" hatası gönderiliyor.

Cognito Kullanıcılarını Sunucu Tarafından Oluşturma ve Yönetme

Google token’ından gelen kullanıcı verilerini elde ettikten sonra, sıra Cognito kullanıcı havuzuna bu kullanıcıları eklemeye geldi. Cognito’nun sunduğu Admin API’ler, kullanıcıları sunucu tarafında doğrudan oluşturmayı ve yönetmeyi mümkün kılıyor. Bu API’ler, kullanıcı arayüzüne gerek duymadan, sıradan bir kullanıcı akışı olmadan kullanıcıları eklemenize olanak tanıyor.

Ancak Cognito’nun kullanıcı oluşturma işlemi için bir şifre gerekiyor. Kullanıcının asla kendi şifresini girmeyeceği bir senaryoda bile, Cognito her kullanıcı için bir şifre talep ediyor. Bu sorunu çözmek için, belirleyici (deterministik) bir şifre oluşturma yöntemi geliştirildi.

Deterministik Şifre Oluşturma: Güvenlik ve Tutarlılık

Belirleyici şifreler, aynı girdilerle her zaman aynı çıktıyı üreten algoritmalar kullanılarak oluşturuluyor. Bu sayede, kullanıcıyı ilk kez oluştururken ve sonraki oturumlarında aynı şifreyi kullanabiliriz. Bu yöntemde, kullanıcının benzersiz Cognito kullanıcı kimliği ve sunucuda saklanan gizli bir anahtar kullanılıyor.

Örneğin, aşağıdaki fonksiyon, kullanıcı kimliğinden ve gizli anahtardan bir şifre oluşturmayı sağlıyor:

function generateDeterministicPassword(userId: string, serverSecret: string): string {
  const combined = `${userId}-${serverSecret}`;
  return require('crypto')
    .createHash('sha256')
    .update(combined)
    .digest('hex')
    .slice(0, 32);
}

Bu fonksiyon, userId ve serverSecret kullanılarak bir SHA-256 hash oluşturuyor ve elde edilen değeri 32 karakterlik bir şifreye dönüştürüyor. Bu şekilde, her kullanıcı için benzersiz ve tekrar üretilebilir bir şifre elde ediliyor.

Tam Entegrasyon Akışı: Google’dan Cognito’ya

Standart Cognito + Google entegrasyonunda, kullanıcı akışı genellikle şu şekilde ilerliyor:

  • Kullanıcı, kendi arayüzündeki "Google ile Oturum Aç" butonuna tıklıyor.
  • Tarayıcı, Cognito’nun yerleşik arayüzüne yönlendiriliyor.
  • Cognito, Google’a OAuth akışını başlatıyor.
  • Google, kullanıcıyı doğruluyor ve token’ı Cognito’ya gönderiyor.
  • Cognito, kullanıcıyı havuza ekliyor ve kullanıcı uygulamaya yönlendiriliyor.

Ancak bu projede, bu akışta değişiklik yapmamız gerekiyordu. Kullanıcı akışı şu şekilde yeniden tasarlandı:

  • Kullanıcı, kendi arayüzündeki "Google ile Oturum Aç" butonuna tıklıyor.
  • Tarayıcı, doğrudan Google’a yönlendiriliyor.
  • Google, kullanıcıyı doğruluyor ve token’ı doğrudan arka uca gönderiyor.
  • Arka uç, token’ı doğruluyor, kullanıcıyı Cognito’ya ekliyor ve kullanıcıya oturum açma token’ı gönderiyor.

Bu akış, kullanıcıya daha akıcı bir deneyim sunarken, arka uçta da tam kontrol sağlıyor. Kullanıcılar, Google’dan aldıkları token’ı doğrudan uygulamaya gönderiyor ve arka uç bu token’ı işleyerek kullanıcıyı Cognito’ya kaydediyor.

Sonuç: Cognito’yu Esnek Hale Getirmek

AWS Cognito’nun standart federasyon akışının dışına çıkmak, ilk bakışta karmaşık görünebilir. Ancak, Google token’larının sunucu tarafında doğrulanması ve Cognito’nun Admin API’lerinin kullanılmasıyla, bu entegrasyonu gerçekleştirmek mümkün. Bu yaklaşım, kullanıcı arayüzüne tam bağımsızlık kazandırırken, arka uçta da tam kontrol sağlıyor.

Bu yöntem, özellikle konsol erişiminizin olmadığı veya özel bir kullanıcı akışı gerektiren projelerde oldukça faydalı olabilir. Ancak, her projede olduğu gibi, bu yaklaşımın da beraberinde getirdiği riskleri ve sınırlamaları dikkate almak gerekiyor. Örneğin, Google token’larının doğrulanması ve Cognito’nun kullanıcı havuzuna elle eklenmesi, bazı standart güvenlik kontrollerinin atlanmasına neden olabilir. Bu nedenle, bu yöntemi kullanmadan önce, projenizin gereksinimlerini ve güvenlik ihtiyaçlarını dikkatlice değerlendirmeniz önem taşıyor.

Yapay zeka özeti

Learn how to integrate Google Sign-In with AWS Cognito without using the hosted UI or console access. Includes server-side token validation, deterministic passwords, and NestJS code.

Yorumlar

00
YORUM BIRAK
ID #VOZF86

0 / 1200 KARAKTER

İnsan doğrulaması

8 + 4 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.