2025-10-25

AWS Cognito ve Google ile Federe Kimlik Doğrulama

A
<!-- SEO Title: AWS Cognito ve Google ile Federe Kimlik Doğrulama Rehberi --> <!-- Meta Description: SST ve Pulumi kullanarak Google ile AWS Cognito Federe Kimlik Doğrulama kurulumu için adım adım rehber. Next.js uygulamanızı bugün güvenceye alın. --> <!-- Slug: aws-cognito-federasyon-kimlik-dogrulama --> <!-- Canonical URL: https://[TR_DOMAIN]/blog/aws-cognito-federasyon-kimlik-dogrulama --> <!-- Hreflang: <link rel="alternate" hreflang="en" href="https://[EN_DOMAIN]/blog/aws-cognito-federated-auth" /> <link rel="alternate" hreflang="tr" href="https://[TR_DOMAIN]/blog/aws-cognito-federasyon-kimlik-dogrulama" /> <link rel="alternate" hreflang="x-default" href="https://[EN_DOMAIN]/blog/aws-cognito-federated-auth" /> --> <!-- Open Graph: og:title: AWS Cognito ve Google ile Federe Kimlik Doğrulama og:description: SST ve Pulumi kullanarak Google ile AWS Cognito Federe Kimlik Doğrulama kurulumunu öğrenin. og:url: https://[TR_DOMAIN]/blog/aws-cognito-federasyon-kimlik-dogrulama -->

AWS Cognito ve Google ile Federe Kimlik Doğrulama

Kullanıcı kimliklerini yönetmek, modern uygulama geliştirmenin kritik bir parçasıdır. Kullanıcı adlarını ve şifreleri kendiniz yönetmek yerine, AWS Cognito Federe Kimlik Doğrulama aracılığıyla Google gibi güvenilir bir sağlayıcıya devretmek güvenli ve kullanıcı dostu bir yaklaşımdır.

Bu rehberde, SST (Serverless Stack) ve Pulumi kullanarak kod olarak altyapı (IaC) yaklaşımıyla AWS Cognito Kullanıcı Havuzu (User Pool) için Google'ı bir Kimlik Sağlayıcı (IdP) olarak nasıl ayarlayacağımızı inceleyeceğiz.

<div class="toc"> <ul> <li><a href="#on-kosullar">Ön Koşullar</a></li> <li><a href="#google-oauth-kurulumu">Adım 1: Google OAuth Kurulumu</a></li> <li><a href="#cognito-kaynaklari-sst">Adım 2: SST ile Cognito Kaynaklarını Oluşturma</a></li> <li><a href="#google-idp-baglama">Adım 3: Google'ı IdP Olarak Bağlama</a></li> <li><a href="#frontend-entegrasyonu">Adım 4: Frontend Entegrasyonu</a></li> <li><a href="#sonuc">Sonuç</a></li> <li><a href="#sss">SSS</a></li> </ul> </div>

Ön Koşullar <a id="on-kosullar"></a>

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  • Bir AWS Hesabı.
  • Bir Google Cloud Projesi.
  • Node.js ve SST kurulu olması.

Adım 1: Google OAuth Kurulumu <a id="google-oauth-kurulumu"></a>

İlk olarak, uygulamamızın kimlik doğrulama için Google'ı kullanmasına izin vermek üzere Google'ı yapılandırmamız gerekir.

  1. Proje Oluşturun: Google Cloud Console'a gidin ve yeni bir proje oluşturun.
  2. Onay Ekranı (Consent Screen): APIs & Services > OAuth consent screen yolunu izleyin.
    • External (Harici) kullanıcı tipini seçin.
    • Uygulama Adı, Kullanıcı Destek E-postası ve Geliştirici İletişim Bilgilerini doldurun.
  3. OAuth İstemcisi Oluşturun: Credentials > Create Credentials > OAuth client ID yolunu izleyin.
    • Uygulama türü: Web application.
    • Authorized JavaScript origins: http://localhost:3000 ekleyin (geliştirme için).
    • Authorized redirect URIs: Bu kısım çok önemlidir. Şu formatı izler: https://<domain-adiniz>.auth.<bolge>.amazoncognito.com/oauth2/idpresponse Not: Bu alanı bir sonraki adımda tanımlayacağız, bu yüzden daha sonra güncellemek üzere bu sekmeyi açık tutun.

Oluşturma işleminden sonra Client ID ve Client Secret değerlerinizi kopyalayın. Bunlara .env dosyanızda ihtiyacınız olacak.

Adım 2: SST ile Cognito Kaynaklarını Oluşturma <a id="cognito-kaynaklari-sst"></a>

Altyapımızı tanımlamak için SST (Pulumi tabanlı) kullanacağız. Bu, kurulumumuzun tekrarlanabilir olmasını sağlar.

Kullanıcı Havuzunu Tanımlama

İlk olarak, Cognito Kullanıcı Havuzunu oluşturun. Sadece Google üzerinden girişlere izin vermek istiyoruz, bu nedenle şifre politikasını kısıtlayabiliriz.

const userPool = new aws.cognito.UserPool('identity-pool', {
  passwordPolicy: {
    minimumLength: 8,
    requireLowercase: false,
    requireNumbers: false,
    requireSymbols: false,
    requireUppercase: false,
  },
  autoVerifiedAttributes: ['email'],
});

Alan Adı (Domain) Ayarlama

Cognito, giriş arayüzünü barındırmak ve yönlendirmeleri işlemek için bir alan adına ihtiyaç duyar.

new aws.cognito.UserPoolDomain('user-pool-domain', {
  domain: process.env.COGNITO_USER_POOL_DOMAIN, // ornek: my-app-auth
  userPoolId: userPool.id,
});

Önemli: Google Console'a geri dönün ve Authorized redirect URI kısmını bu alan adıyla güncelleyin.

Adım 3: Google'ı IdP Olarak Bağlama <a id="google-idp-baglama"></a>

Şimdi Google'ı Kullanıcı Havuzumuza bağlıyoruz. Google'ın email ve sub (konu) iddialarını (claims) Cognito'nun email ve username özelliklerine eşliyoruz.

const idpGoogle = new aws.cognito.IdentityProvider('idp-google', {
  userPoolId: userPool.id,
  providerName: 'Google',
  providerType: 'Google',
  providerDetails: {
    client_id: process.env.GOOGLE_OAUTH_CLIENT_ID,
    client_secret: process.env.GOOGLE_OAUTH_CLIENT_SECRET,
    authorize_scopes: 'openid profile email',
  },
  attributeMapping: {
    email: 'email',
    username: 'sub',
  },
});

Son olarak, frontend uygulamanızın kullanacağı Kullanıcı Havuzu İstemcisini (User Pool Client) oluşturun.

const userPoolClient = new aws.cognito.UserPoolClient('user-pool-client', {
  userPoolId: userPool.id,
  allowedOauthFlows: ['code'],
  allowedOauthScopes: ['email', 'openid', 'profile'],
  supportedIdentityProviders: [idpGoogle.providerName],
  callbackUrls: ['http://localhost:3000/auth'], // Frontend callback adresiniz
  logoutUrls: ['http://localhost:3000'],
});

Adım 4: Frontend Entegrasyonu <a id="frontend-entegrasyonu"></a>

Next.js arayüzünüzü bağlamak için, ortam değişkenlerini otomatik olarak geçirmek üzere sst.aws.Nextjs yapısını kullanabilirsiniz.

new sst.aws.Nextjs('frontend', {
  environment: {
    NEXT_PUBLIC_COGNITO_CLIENT_ID: userPoolClient.id,
    NEXT_PUBLIC_COGNITO_DOMAIN: `https://${process.env.COGNITO_USER_POOL_DOMAIN}.auth.${aws.config.region}.amazoncognito.com`,
  },
});

Frontend uygulamanızda artık giriş URL'sini oluşturabilirsiniz:

const loginUrl = `${process.env.NEXT_PUBLIC_COGNITO_DOMAIN}/login?client_id=${process.env.NEXT_PUBLIC_COGNITO_CLIENT_ID}&response_type=code&scope=email+openid+profile&redirect_uri=http://localhost:3000/auth`;

Kullanıcıyı bu URL'ye yönlendirmek Google OAuth akışını başlatacaktır.

Sonuç <a id="sonuc"></a>

Google'ı AWS Cognito ile entegre ederek, kullanıcılar için giriş sürecini basitleştirir ve şifreleri doğrudan yönetmeyerek güvenliği artırırsınız. SST ve Pulumi kullanmak, bu altyapıyı kod olarak yönetmenizi sağlayarak dağıtımı ve bakımı kolaylaştırır.

SSS <a id="sss"></a>

S: Facebook veya Apple gibi diğer sağlayıcıları kullanabilir miyim? C: Evet, Cognito; Facebook, Amazon, Apple ve genel OIDC/SAML sağlayıcıları dahil olmak üzere birden fazla kimlik sağlayıcıyı destekler.

S: Hosted UI (Barındırılan Arayüz) zorunlu mu? C: OAuth akışını manuel olarak uygularsanız kesinlikle zorunlu değildir, ancak Cognito'nun Hosted UI'ı federasyon yönlendirmelerini yönetmenin en kolay yoludur.

S: Token yenilemeyi (refresh) nasıl hallederim? C: Cognito bir yenileme jetonu (refresh token) döndürür. Uygulamanız (veya AWS Amplify gibi bir kütüphane), kullanıcıyı tekrar giriş yapmaya zorlamadan yeni erişim jetonları almak için bu jetonu kullanabilir.

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "headline": "AWS Cognito ve Google ile Federe Kimlik Doğrulama", "description": "SST ve Pulumi kullanarak Google ile AWS Cognito Federe Kimlik Doğrulama kurulumu için adım adım rehber.", "author": { "@type": "Organization", "name": "DevOpsN" }, "publisher": { "@type": "Organization", "name": "DevOpsN", "logo": { "@type": "ImageObject", "url": "https://[TR_DOMAIN]/logo.png" } }, "datePublished": "2025-10-25" } </script> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{ "@type": "Question", "name": "Facebook veya Apple gibi diğer sağlayıcıları kullanabilir miyim?", "acceptedAnswer": { "@type": "Answer", "text": "Evet, Cognito; Facebook, Amazon, Apple ve genel OIDC/SAML sağlayıcıları dahil olmak üzere birden fazla kimlik sağlayıcıyı destekler." } }, { "@type": "Question", "name": "Hosted UI (Barındırılan Arayüz) zorunlu mu?", "acceptedAnswer": { "@type": "Answer", "text": "OAuth akışını manuel olarak uygularsanız kesinlikle zorunlu değildir, ancak Cognito'nun Hosted UI'ı federasyon yönlendirmelerini yönetmenin en kolay yoludur." } }, { "@type": "Question", "name": "Token yenilemeyi (refresh) nasıl hallederim?", "acceptedAnswer": { "@type": "Answer", "text": "Cognito bir yenileme jetonu (refresh token) döndürür. Uygulamanız (veya AWS Amplify gibi bir kütüphane), kullanıcıyı tekrar giriş yapmaya zorlamadan yeni erişim jetonları almak için bu jetonu kullanabilir." } }] } </script>

Görsel Önerileri

  1. Google OAuth Onay Ekranı: Google Cloud Console'daki OAuth onay ekranı yapılandırmasının ekran görüntüsü. Alt metin: "Google Cloud Console OAuth onay ekranı yapılandırması".
  2. Cognito Kimlik Sağlayıcı Ayarları: Google'ın bir IdP olarak yapılandırıldığını gösteren AWS Cognito konsolu ekran görüntüsü. Alt metin: "Google için AWS Cognito Kimlik Sağlayıcı ayarları".
  3. Kimlik Doğrulama Akış Şeması: Kullanıcı -> Next.js Uygulaması -> Cognito -> Google akışını gösteren basit bir şema. Alt metin: "AWS Cognito Federe Kimlik Doğrulama akış şeması".

Link Önerileri

Kaynak / Source: https://awsfundamentals.com/blog/cognito-federated-auth