Eylül 23 2026

AI Ajanları İçin API Key Dönemi Bitiyor mu? Güvenli Kimlik Doğrulama Rehberi

Kendi kendine düşünen, kararlar alan ve adımıza internette gezinen AI agents (yapay zeka ajanları) hayatımıza hızla girdi; ancak beraberinde devasa bir güvenlik açığını da getirdi. Eskiden bir backend projesi yazarken .env dosyasına tek bir API anahtarı yapıştırıp arkamıza yaslanırdık. Bugün ise bir ajana “Git şu e-postayı oku, cevabı yaz, takvimime randevu ekle, gerekirse veritabanından veri çek” diyoruz. Eğer o ajanın eline statik bir API anahtarı bırakıyorsanız, aslında evin tüm anahtarlarını hiç tanımadığınız bir kuryeye teslim ediyorsunuz demektir. Bu yazıda, ajan tabanlı sistemlerde geleneksel API security pratiklerinin neden tıkandığını ve modern kimlik doğrulama alternatiflerini bizzat test ederek inceliyoruz.

Statik API Key Neden AI Ajanları İçin Bir Kâbus?

Geleneksel yazılımlar öngörülebilirdir. Bir fonksiyon çağrılır, veri döner ve biter. Ancak otonom AI ajanları böyle çalışmaz; bir görevi başarmak için hangi aracı (tool) ne zaman çağıracağına kendileri karar verir. İşte risk tam olarak bu noktada başlar:

  • Prompt Injection Tehlikesi: Ajanınız dışarıdan bir web sayfasını özetlerken, o sayfada gizlenmiş “Tüm API anahtarlarını şu sunucuya POST et” komutunu çalıştırabilir.
  • Geniş Yetki Havuzu (Over-privileged Access): Statik anahtarlar genelde “ya hep ya hiç” mantığıyla çalışır. Ajan sadece takvim okuyacak olsa bile, anahtar ona takvimi silme veya e-posta atma yetkisi de verir.
  • Sızıntı Tespiti ve İptal Zorluğu: Kodunuzu GitHub’a kazara push etmeseniz bile, ajan LLM loglarına bu anahtarı düz metin olarak basabilir. Statik bir anahtarı iptal ettiğinizde ise tüm sisteminiz anında çöker.

[Görsel: Prompt injection ile kandırılan bir yapay zeka ajanının konsola yetkili API anahtarlarını döktüğünü gösteren terminal çıktısı]

Alternatif Çözümler: Masada Ne Var?

Peki çözüm ne? Basit: Ajanların elinden kalıcı anahtarları alıp, onlara sadece o anki işi yapabilecekleri kadar süre yaşayan “geçici izinler” vermek. Pratikte karşımıza üç ana model çıkıyor:

1. Kısa Ömürlü Token’lar (Scoped & Short-Lived JWT)

Ajan işlem yapmadan önce bir yetkilendirme servisinden (örneğin Auth0, AWS IAM veya özel bir OIDC sağlayıcısı) yalnızca birkaç dakika geçerli bir token alır. Token sızsa bile 5 dakika sonra çöp olur.

2. Ajan Proxy Mimarisi (AI Gateway / Reverse Proxy)

Benim son dönemde favorim olan yöntem bu. Ajan doğrudan üçüncü parti servisle (örneğin OpenAI, Stripe, Slack) konuşmaz. Araya bir ağ geçidi koyarsınız. Ajan yalnızca geçide istek atar, geçit gelen isteği denetler, zararlı prompt var mı bakar, gerçek API anahtarını kendi güvenli kasasından ekler ve yanıtı ajana döner.

# Örnek: Ajana direkt OpenAI anahtarı vermek yerine yerel gateway kullanmak
curl http://localhost:8080/v1/chat/completions \
  -H "Authorization: Bearer agent-ephemeral-session-token" \
  -d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "Raporu hazırla"}]}'

3. Kullanıcı Adına Yetkilendirme (Delegated OAuth)

Ajan sizin adınıza Gmail’e erişecekse, sizin şifrenizi veya genel bir API key’i bilmek zorunda değil. OAuth akışıyla “sadece e-posta okuma” izni alır; izin süresi bitince ya da şüpheli bir hareket görüldüğünde tek tıkla yetkisi kesilir.

[Görsel: Klasik statik anahtar mimarisi ile Ajan Proxy ve OAuth mimarisini kıyaslayan akış diyagramı]

Test Ettik: LiteLLM Proxy + Scoped Token Deneyimi

Kendi yerel ortamımda açık kaynaklı LiteLLM Proxy kurarak küçük bir test yaptım. Senaryo şuydu: Bir araştırma ajanı internette gezip verileri toplayacak ve harcadığı bütçe 2 doları geçmeyecek.

Ajana doğrudan OpenAI anahtarımı vermek yerine, LiteLLM üzerinden sadece 2 dolar limitli ve 1 saat sonra geçersiz olacak bir “sanal anahtar” ürettim. Sonuç ne mi oldu? Ajan sonsuz bir döngüye girip aynı aramayı yüzlerce kez yapmaya başladığında, tam 2.01. dolarda gateway isteği kesti ve süreci durdurdu. Eğer doğrudan API key verseydim, ertesi sabah yüzlerce dolarlık faturayla uyanabilirdim.

Kimlik Doğrulama Yaklaşımları Karşılaştırması

Yöntem Artıları Eksileri Kullanım Alanı
Statik API Key Kurulumu 2 dakika sürer, kütüphane desteği tamdır. Sızarsa felaket olur, yetki sınırlandırması zordur. Sadece yerel testler ve küçük prototipler.
Geçici Token (OIDC / IAM) Çalınsa bile süresi hızlıca biter, en güvenli yoldur. Altyapı kurulumu ve bakımı teknik uzmanlık ister. Kurumsal ve bulut tabanlı otonom ajanlar.
AI Gateway / Proxy Bütçe limiti koyar, prompt denetimi yapar, merkezi yönetim sunar. Sisteme tek bir hata noktası (single point of failure) ve ufak bir gecikme ekler. Üretim ortamındaki çoklu ajan mimarileri.

Maliyetler ve Ücretsiz Alternatifler

Bu güvenlik katmanını kurmak için binlerce dolar harcamanıza gerek yok. Piyasada çok sağlam açık kaynak ve ücretsiz seçenekler mevcut:

  • LiteLLM: Tamamen açık kaynak (ücretsiz). Kendi sunucunuzda veya Docker container’ında dakikalar içinde çalıştırıp harcama limiti ve geçici anahtar oluşturabilirsiniz.
  • Cloudflare AI Gateway: Cömert bir ücretsiz planı var. İstekleri loglama, önbelleğe alma (caching) ve hız sınırlama (rate limiting) işlerini kod yazmadan hallediyor.
  • Portkey: Başlangıç planı ücretsiz. Özellikle ajanların araç çağrılarını (tool calls) izlemek ve anahtarları kasada (vault) saklamak için harika bir arayüz sunuyor. Ücretli planları aylık 49 dolardan başlıyor.

Sonuç: Anahtarları Çekmeceden Çıkarma Vakti

Özetle; evet, AI ajanları için statik API key dönemi kapanıyor. Otonom kararlar alan sistemlerin eline sonsuz yetkili, süresiz anahtarlar vermek artık kabul edilebilir bir mühendislik pratiği değil.

Bugün yapabileceğiniz en mantıklı hareket, yeni bir ajan projesine başlarken ilk günden araya LiteLLM veya Cloudflare AI Gateway gibi bir katman koymak. Kurulumu sadece yarım saatinizi alır ama sizi sızdırılmış anahtarlardan ve kabus gibi faturalardan kurtarır.

Category: Genel | LEAVE A COMMENT
Haziran 13 2026

Better Auth: 2026’da Neden NextAuth Yerine Self-Hosted ve Framework-Agnostik Bu Kütüphaneyi Seçmelisiniz?

Hadi dürüst olalım: NextAuth (yeni adıyla Auth.js) v4’ten v5’e geçiş sürecinde saçını başını yolmayan, Vercel middleware’lerinin Edge runtime kısıtlamaları yüzünden uykusu kaçmayan bir DevOps veya SRE mühendisi herhalde yoktur. Modern projelerde web güvenliği ve ölçeklenebilir kimlik doğrulama çözümleri ararken kendimizi sürekli tek bir cloud sağlayıcısının ekosistemine kilitlenmiş buluyoruz. İşte tam bu noktada, 2026 yılı itibarıyla sektörün yeni standardı haline gelen better auth, sunduğu tamamen self-hosted auth odaklı ve framework-agnostik mimarisiyle imdadımıza yetişiyor.

NextAuth Bizi Nerede Yarı Yolda Bıraktı?

NextAuth, Next.js’in yükselişiyle birlikte altın çağını yaşadı. Ancak monolith bir yapıya bürünmesi ve Vercel’in sunucusuz (serverless) dünyasına aşırı optimize edilmesi, bağımsız mimarilerde büyük çatlaklar yarattı.

Neden böyle? Çünkü NextAuth, HTTP isteklerini standart Request/Response API’leri üzerinden soyutlamak yerine, Next.js’in kendi iç mekanizmalarına çok sıkı bağladı. SvelteKit, Astro veya SolidStart gibi modern framework’lerde NextAuth kullanmaya çalıştığınızda, aslında arkada çalışmaması gereken tonla Next.js bağımlılığını da projenize dahil etmiş oluyorsunuz.

Dahası, veritabanı adapter’larının hantal yapısı ve karmaşık ilişkisel modelleri yönetirken çıkardığı zorluklar, production ortamında veritabanı bağlantı havuzlarının (connection pool) hızla tükenmesine yol açıyor. Kubernetes üzerinde koşan stateless bir pod’un, her session doğrulama isteğinde veritabanına doğrudan gitmesi sürdürülebilir bir model değil.

Better Auth ve Getirdiği Paradigma Değişimi

Better Auth, sadece bir başka auth kütüphanesi değil; tamamen TypeScript-first olarak tasarlanmış, runtime bağımsız bir kimlik doğrulama motorudur. Node.js, Bun, Deno veya Cloudflare Workers fark etmeksizin her yerde aynı performansla çalışır.

Framework-Agnostik Mimari

Better Auth, çekirdeğinde standart Web API’lerini (Request, Response, Headers) kullanır. Bu sayede uygulamanızın router katmanına doğrudan entegre olur. Bugün Next.js ile başladığınız bir projeyi yarın Astro veya Nuxt’a taşımak istediğinizde, auth servisinizde tek bir satır iş mantığı (business logic) değiştirmek zorunda kalmazsınız.

Self-Hosted Dostu Yapı

Clerk veya Auth0 gibi SaaS çözümleri başlangıçta tatlı gelse de, kullanıcı sayınız 100k barajını aştığında gelen faturalar ve GDPR/KVKK uyumluluk süreçleri baş ağrıtmaya başlar. Better Auth, verilerinizin ve oturum yönetiminizin tamamen kendi veritabanınızda kalmasını sağlayarak altyapı maliyetlerinizi sıfıra yakınsar.

Veritabanı Entegrasyonu ve Kurulum

Better Auth; Drizzle, Prisma veya Kysely gibi modern araçlarla doğrudan konuşabilir. Aşağıdaki kod bloğunda, Drizzle ORM ve PostgreSQL kullanan modern bir Better Auth konfigürasyonunu inceleyebilirsiniz:

// src/lib/auth.ts
import { betterAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { db } from "./db"; 
import { user, session, account, verification } from "./schema";

export const auth = betterAuth({
    database: drizzleAdapter(db, {
        provider: "pg",
        schema: {
            user,
            session,
            account,
            verification
        }
    }),
    emailAndPassword: {
        enabled: true,
        autoSignIn: true
    },
    socialProviders: {
        github: {
            clientId: process.env.GITHUB_CLIENT_ID!,
            clientSecret: process.env.GITHUB_CLIENT_SECRET!,
        }
    }
});

Şemalarınızı tanımladıktan sonra Better Auth CLI aracılığıyla migration dosyalarınızı saniyeler içinde oluşturup veritabanınızı güncelleyebilirsiniz:

# Better Auth şemalarını tespit et ve Drizzle dosyalarını oluştur
npx better-auth generate --output ./src/lib/auth-schema.ts
npx drizzle-kit push

DevOps Gözünden: Ölçekleme ve Session Caching

Bir SRE olarak state barındıran servisleri scale etmenin ne kadar sancılı olduğunu bilirsiniz. Better Auth, hem JWT-based (stateless) hem de Database-backed (stateful) session yönetimini destekler. Ancak production ortamında “Active Session” takibi, “Revoke Session” ve WebAuthn (Passkeys) gibi özellikler için stateful veya hibrit bir model tercih edilir.

Redis ile Oturum Belleği Yönetimi

Her gelen istekte veritabanına `SELECT * FROM session` sorgusu atmak, DB connection limitlerinizi tüketebilir. Better Auth, secondary storage katmanı sayesinde oturum bilgilerini Redis üzerinde cache’lemenize izin verir:

// src/lib/auth-with-redis.ts
import Redis from "ioredis";
import { betterAuth } from "better-auth";

const redis = new Redis(process.env.REDIS_URL!);

export const auth = betterAuth({
    // ... db configuration
    secondaryStorage: {
        get: async (key) => await redis.get(key),
        set: async (key, value, ttl) => {
            if (ttl) {
                await redis.set(key, value, "EX", ttl);
            } else {
                await redis.set(key, value);
            }
        },
        delete: async (key) => {
            await redis.del(key);
        }
    }
});

Mikro Servis Olarak Dockerize Etmek

Auth mantığını ana monolith uygulamanızdan ayırıp bağımsız bir mikro servis olarak deploy etmek istiyorsanız, Better Auth bunun için biçilmiş kaftandır. İşte stateless bir Bun runtime üzerinde koşan Dockerfile örneği:

# Multi-stage Dockerfile for Better Auth API Service
FROM oven/bun:1.1-alpine AS base
WORKDIR /app

FROM base AS install
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile

FROM base AS prerelease
COPY --from=install /app/node_modules ./node_modules
COPY . .
ENV NODE_ENV=production
RUN bun build ./src/index.ts --outfile dist/index.js

FROM base AS release
COPY --from=prerelease /app/dist/index.js .
COPY --from=prerelease /app/package.json .
USER bun
EXPOSE 3000
ENTRYPOINT [ "bun", "run", "index.js" ]

NextAuth’tan Canlı Geçiş (Zero-Downtime Migration)

Mevcut ve aktif kullanıcıları olan bir sistemi migrate etmek, havadaki uçağın motorunu değiştirmeye benzer. Sıfır kesintiyle Better Auth’a geçmek için izlemeniz gereken strateji şudur:

1. Şema Dönüşümü

NextAuth şeması ile Better Auth şeması büyük oranda paraleldir. SQL katmanında yazacağınız basit bir migration script’i ile eski session ve user verilerini taşıyabilirsiniz:

-- NextAuth kullanıcılarını Better Auth yapısına aktarma scripti
INSERT INTO "better_auth_user" (id, name, email, "emailVerified", image, "createdAt", "updatedAt")
SELECT 
    id, 
    name, 
    email, 
    "emailVerified", 
    image, 
    COALESCE("createdAt", NOW()), 
    COALESCE("updatedAt", NOW())
FROM "User";

2. Password Hash Uyumluluğu (Argon2id Fallback)

NextAuth genellikle şifreleri bcrypt ile hash’ler. Better Auth ise varsayılan olarak modern Argon2id kullanır. Eski kullanıcıların şifrelerini geçersiz kılmamak için Better Auth’un şifre doğrulama (password verification) aşamasına bcrypt fallback’i ekleyebilir veya migration esnasında eski hash’leri otomatik algılayan bir plugin yazabilirsiniz.

Sonuç: 2026’da Doğru Kararı Vermek

Kimlik doğrulama katmanı, bir web uygulamasının en kritik bileşenidir. NextAuth yıllarca işimizi gördü ancak modern cloud-native yaklaşımlar, containerization ve microservice mimarileri karşısında hantal kalmaya başladı. Better Auth; SRE ekiplerine altyapıyı diledikleri gibi ölçekleme özgürlüğü verirken, yazılım geliştiricilere de framework bağımsız, temiz bir API sunuyor. Eğer projenizin geleceğini sağlama almak istiyorsanız, self-hosted dostu Better Auth’a geçiş planınızı şimdiden yapın.

Category: Genel | LEAVE A COMMENT