API Key Nedir ve Nasıl Güvenli Kullanılır?

API Key (API Anahtarı), bir uygulamanın veya istemcinin API hizmetine erişirken kendisini tanıtmak için kullandığı özel bir anahtar değeridir.

API anahtarları, özellikle web uygulamaları, mobil uygulamalar, bulut servisleri ve üçüncü taraf yazılım entegrasyonlarında kullanılır. API sağlayıcıları bu anahtarlar aracılığıyla istekleri belirli uygulamalarla veya hesaplarla ilişkilendirebilir, kullanım miktarını takip edebilir ve erişim kısıtlamaları uygulayabilir.

API Key, çoğunlukla harflerden, rakamlardan veya farklı karakterlerden oluşan bir değerdir. Anahtarın biçimi ve uzunluğu hizmet sağlayıcısına göre değişebilir.

API Key kullanılması tek başına bir API'nin tamamen güvenli olduğu anlamına gelmez. Anahtarın nasıl oluşturulduğu, saklandığı, aktarıldığı ve hangi yetkilere sahip olduğu da güvenlik açısından önemlidir.

Visualizing Token Usage in AOAI via APIM: Using the emit-token-metric-policy | by tamami.I Web Developer | Medium

API Key Ne İşe Yarar?

API anahtarları, bir API hizmetine gönderilen isteklerin hangi uygulama veya proje tarafından gerçekleştirildiğini belirlemek amacıyla kullanılabilir.

Başlıca kullanım alanları şunlardır:

  • API hizmetlerine erişimi kontrol etmek.

  • Uygulamaları ve projeleri tanımlamak.

  • API kullanım miktarını takip etmek.

  • Belirli istemcilere erişim izni vermek.

  • İstek sınırlandırması uygulamak.

  • Ücretli API hizmetlerinde kullanım hesaplaması yapmak.

  • Üçüncü taraf yazılım entegrasyonlarını yönetmek.

  • Otomatik sunucu işlemlerinde API erişimi sağlamak.

API anahtarları genellikle uygulama veya proje kimliğini temsil eder. Tek başına son kullanıcının kimliğini güvenilir biçimde doğrulamak için yeterli değildir.

API Key Nasıl Çalışır?

API Key kullanılan sistemlerde istemci uygulama, kendisine verilen anahtarı HTTP isteğiyle birlikte API sunucusuna gönderir.

Understanding Whats an Api Key: A Developer's Guide | RealtyAPI Blog

Temel çalışma süreci şu şekildedir:

  1. API sağlayıcısı bir uygulama için API anahtarı oluşturur.

  2. Anahtar, ilgili uygulamaya veya projeye atanır.

  3. İstemci uygulama API isteği gönderirken anahtarı ekler.

  4. Sunucu, gelen anahtarın geçerli olup olmadığını kontrol eder.

  5. Anahtarın kullanım izinleri ve varsa kısıtlamaları değerlendirilir.

  6. İstek uygun bulunursa API işlemi gerçekleştirilir.

  7. Geçersiz veya yetkisiz istekler reddedilir.

API anahtarı doğrulaması, sunucunun uyguladığı güvenlik politikasının yalnızca bir bölümünü oluşturur.

API Key Nasıl Oluşturulur?

API anahtarları genellikle API hizmeti sağlayıcısının yönetim panelinden oluşturulur.

Anahtar oluşturma süreci hizmete göre değişebilse de genel olarak şu adımlardan oluşur:

  1. API hizmetinde uygulama veya proje oluşturulur.

  2. API erişimi etkinleştirilir.

  3. Gerekli izinler belirlenir.

  4. Yeni API anahtarı oluşturulur.

  5. Anahtar güvenli bir ortamda saklanır.

  6. Uygulama, API isteklerinde bu anahtarı kullanır.

Örnek bir API anahtarı:

api_8f4d2a91c7e6b3f05a12d9e84c6b7f30

Bu değer yalnızca örnektir ve gerçek bir hizmete erişim sağlamaz.

API Key HTTP İsteklerinde Nasıl Kullanılır?

API anahtarları farklı yöntemlerle HTTP isteklerine eklenebilir.

1. HTTP Header ile API Key Gönderme

Yaygın yöntemlerden biri API anahtarını HTTP başlığı içerisinde göndermektir.

Örnek:

GET /api/urunler HTTP/1.1
Host: api.example.com
X-API-Key: ORNEK_API_ANAHTARI

Bu örnekte X-API-Key başlığı kullanılmıştır.

Başlığın adı API sağlayıcısına göre değişebilir.

2. Authorization Header Kullanımı

Bazı API sistemleri anahtarı Authorization başlığı üzerinden kabul eder.

GET /api/urunler HTTP/1.1
Host: api.example.com
Authorization: Bearer ORNEK_API_ANAHTARI

Bearer biçiminin kullanılması API'nin tasarımına bağlıdır. Her API anahtarı Bearer biçiminde gönderilmez.

3. URL Parametresi ile API Key Gönderme

Bazı API hizmetleri anahtarın URL parametresiyle gönderilmesini destekler.

/api/urunler?api_key=ORNEK_API_ANAHTARI

Ancak bu yöntem, gizli API anahtarları için tercih edilmemelidir.

URL adresleri tarayıcı geçmişine, sunucu günlüklerine ve farklı izleme sistemlerine kaydedilebilir. Bu durum anahtarın açığa çıkma riskini artırır.

API Key ile PHP Kullanımı

PHP uygulamalarında API anahtarlarıyla HTTP istekleri gerçekleştirilebilir.

Aşağıdaki örnekte cURL kullanılarak bir API servisine istek gönderilmektedir.

<?php

$apiKey = getenv('API_KEY');

if (!$apiKey) {
    throw new RuntimeException(
        'API anahtarı tanımlanmadı.'
    );
}

$ch = curl_init(
    'https://api.example.com/urunler'
);

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'X-API-Key: ' . $apiKey,
        'Accept: application/json'
    ],
    CURLOPT_TIMEOUT => 15
]);

$response = curl_exec($ch);

if ($response === false) {
    throw new RuntimeException(
        curl_error($ch)
    );
}

$statusCode = curl_getinfo(
    $ch,
    CURLINFO_HTTP_CODE
);

curl_close($ch);

if ($statusCode !== 200) {
    throw new RuntimeException(
        'API isteği başarısız.'
    );
}

$data = json_decode(
    $response,
    true,
    512,
    JSON_THROW_ON_ERROR
);

print_r($data);

Bu örnekte API anahtarı kaynak koduna doğrudan yazılmamıştır. Ortam değişkeninden alınmaktadır.

api.example.com örnek bir adrestir ve gerçek bir API hizmetini temsil etmez.

API Key ile Node.js Kullanımı

Node.js uygulamalarında API anahtarlarıyla istek göndermek için fetch() kullanılabilir.

Örnek:

const apiKey = process.env.API_KEY;

if (!apiKey) {
    throw new Error("API anahtarı bulunamadı.");
}

async function urunleriGetir() {
    const response = await fetch(
        "https://api.example.com/urunler",
        {
            headers: {
                "X-API-Key": apiKey,
                "Accept": "application/json"
            }
        }
    );

    if (!response.ok) {
        throw new Error(
            `HTTP hatası: ${response.status}`
        );
    }

    const data = await response.json();

    console.log(data);
}

urunleriGetir().catch(console.error);

Bu örnek, modern Node.js sürümlerindeki yerleşik fetch() desteğini kullanır.

API anahtarı sunucu tarafındaki ortam değişkeninden alınır.

API Key ile Python Kullanımı

Python uygulamalarında API anahtarı kullanılarak HTTP istekleri gerçekleştirilebilir.

Örneğin requests kütüphanesi kullanılabilir.

Kurulum:

python -m pip install requests

Örnek Python kodu:

import osimport requestsapi_key = os.environ["API_KEY"]url = "https://api.example.com/urunler"headers = {    "X-API-Key": api_key,    "Accept": "application/json"}response = requests.get(    url,    headers=headers,    timeout=15)response.raise_for_status()data = response.json()print(data)

Bu örnekte API anahtarı işletim sisteminin ortam değişkenlerinden okunur.

API Key Nasıl Güvenli Saklanır?

API anahtarlarının güvenli saklanması, API sistemlerinin korunmasında önemli bir gerekliliktir.

Gizli API anahtarları kaynak koduna doğrudan yazılmamalıdır.

Ortam Değişkenleri Kullanmak

API anahtarları, uygulamanın çalıştığı ortamda tanımlanan değişkenler üzerinden okunabilir.

Örneğin:

API_KEY=ORNEK_GIZLI_ANAHTAR

PHP içerisinde:

$apiKey = getenv('API_KEY');

Node.js içerisinde:

const apiKey = process.env.API_KEY;

Python içerisinde:

import osapi_key = os.environ["API_KEY"]

Ortam değişkenleri, anahtarın doğrudan kaynak koduna eklenmesini önlemeye yardımcı olur. Ancak ortam değişkenlerinin bulunduğu sunucunun ve yapılandırma dosyalarının da korunması gerekir.

Gizli Bilgi Yönetim Sistemleri

Daha kapsamlı uygulamalarda API anahtarları, özel gizli bilgi yönetim sistemlerinde saklanabilir.

Bu sistemler erişim kontrolü, kayıt tutma ve anahtar yaşam döngüsünün yönetilmesine yardımcı olabilir.

API Key Neden Kaynak Koduna Yazılmamalıdır?

API anahtarının kaynak kodunda bulunması, kodun paylaşılması veya yanlışlıkla yayınlanması durumunda güvenlik riski oluşturur.

Örneğin aşağıdaki kullanım uygun değildir:

const apiKey = "GERCEK_GIZLI_API_ANAHTARI";

Bu değer kaynak koduyla birlikte başkalarına ulaşabilir.

Özellikle herkese açık kod depolarına yüklenen gizli anahtarlar kötüye kullanılabilir.

Anahtarın bir kod deposuna yanlışlıkla eklenmesi durumunda yalnızca koddan silinmesi yeterli değildir. İlgili anahtar iptal edilmeli veya değiştirilmelidir.

Frontend Kodlarında API Key Kullanılır mı?

Gizli API anahtarlarının doğrudan tarayıcıda çalışan JavaScript kodlarına eklenmesi güvenli değildir.

Örneğin:

const apiKey = "GIZLI_API_ANAHTARI";

Bu kod tarayıcıya gönderildiğinde kullanıcı tarafından incelenebilir.

Gizli anahtar gerektiren API istekleri genellikle backend üzerinden gerçekleştirilmelidir.

API Key Security Best Practices: 10 Essential Rules - EnvManager

Güvenli bir backend aracılığıyla iletişim şu şekilde gerçekleştirilebilir:

  1. Tarayıcı, uygulamanın backend sunucusuna istek gönderir.

  2. Backend, gerekli kullanıcı ve erişim kontrollerini gerçekleştirir.

  3. Backend, güvenli şekilde saklanan API anahtarını kullanır.

  4. Harici API hizmetine istek gönderilir.

  5. Alınan yanıt gerekli kontrollerden sonra istemciye iletilir.

Bazı API sağlayıcıları, tarayıcı veya mobil uygulamalarda kullanılmak üzere kısıtlanabilir ve herkese açık anahtarlar sunabilir. Bu tür anahtarlar gizli sunucu anahtarlarıyla aynı şekilde değerlendirilmemelidir.

API Key Güvenliği İçin IP Kısıtlaması

Bazı API sağlayıcıları, anahtarların yalnızca belirli IP adreslerinden kullanılmasına izin verir.

Örneğin bir API anahtarı yalnızca belirli bir backend sunucusunun IP adresiyle sınırlandırılabilir.

Bu yöntem, anahtarın farklı ağlardan kullanılmasını kısıtlamaya yardımcı olur.

Ancak IP kısıtlaması tek başına yeterli bir güvenlik mekanizması değildir.

API Key Rate Limiting Nedir?

Rate Limiting, bir istemcinin belirli bir zaman aralığında yapabileceği API isteği sayısını sınırlandırma işlemidir.

Örneğin bir API hizmetinde aşağıdaki sınırlar uygulanabilir:

İstemci türü

Örnek istek sınırı

Ücretsiz hesap

Dakikada 60 istek

Standart hesap

Dakikada 300 istek

Kurumsal hesap

Dakikada 1.000 istek

Bu değerler yalnızca örnektir.

Rate Limiting sayesinde API kaynaklarının aşırı tüketilmesi sınırlandırılabilir.

Belirlenen istek sınırı aşıldığında sunucu 429 Too Many Requests durum kodunu döndürebilir.

API Key Rotation Nedir?

API Key Rotation, mevcut API anahtarının yeni bir anahtarla değiştirilmesi işlemidir.

Bu işlem güvenlik politikaları kapsamında veya anahtarın ele geçirilmesinden şüphelenildiğinde gerçekleştirilebilir.

Genel anahtar değiştirme süreci:

  1. Yeni API anahtarı oluşturulur.

  2. Uygulama yeni anahtarı kullanacak şekilde yapılandırılır.

  3. Yeni anahtarın çalıştığı doğrulanır.

  4. Eski anahtar devre dışı bırakılır.

  5. Sistem günlükleri ve API erişimleri kontrol edilir.

Anahtarın ele geçirildiği doğrulanmışsa riskin azaltılması için eski anahtarın mümkün olan en kısa sürede iptal edilmesi gerekir.

API Key ile JWT Arasındaki Farklar

API Key ve JWT, API sistemlerinde kullanılabilen iki farklı mekanizmadır.

Özellik

API Key

JWT

Temel yapı

Anahtar değeri

JSON tabanlı token biçimi

Kullanım

Uygulama veya proje tanımlama

Claim taşıma ve doğrulanabilir token oluşturma

Kullanıcı bilgisi

Genellikle doğrudan içermez

Claim olarak içerebilir

Geçerlilik süresi

Sağlayıcının politikasına bağlıdır

exp claim'i kullanılabilir

Yetki bilgisi

Sunucu tarafında ilişkilendirilebilir

Claim içerisinde taşınabilir

İptal işlemi

Anahtar devre dışı bırakılabilir

Ek iptal mekanizmaları gerekebilir

JWT, API Key yerine her durumda kullanılmak zorunda değildir.

Seçim, uygulamanın kimlik doğrulama ve yetkilendirme gereksinimlerine bağlıdır.

API Key ile OAuth 2.0 Arasındaki Farklar

OAuth 2.0, korumalı kaynaklara sınırlı erişim sağlamak için kullanılan bir yetkilendirme çerçevesidir.

API Key ise genellikle istemci uygulamayı veya projeyi tanımlamak için kullanılan bir anahtardır.

Özellik

API Key

OAuth 2.0

Temel amaç

İstemci tanımlama ve erişim kontrolü

Yetkilendirme ve erişim devri

Kullanıcı onayı

Genellikle gerekmez

Bazı akışlarda kullanılır

Erişim kapsamı

Sağlayıcının yapılandırmasına bağlıdır

Scope desteği bulunur

Token yönetimi

Anahtar yönetimi

Access Token ve isteğe bağlı Refresh Token

Kullanım

Basit servis entegrasyonları

Üçüncü taraf ve kapsamlı API entegrasyonları

Kullanıcı adına başka bir hizmete erişim verilmesi gereken uygulamalarda OAuth 2.0 daha uygun bir yaklaşım olabilir.

API Key Kullanmanın Avantajları

API anahtarlarının başlıca avantajları şunlardır:

Kolay entegrasyon: API isteğine bir anahtar eklenerek kullanılabilir.

Uygulama tanımlama: İsteklerin hangi proje veya uygulamayla ilişkili olduğu belirlenebilir.

Kullanım takibi: API çağrılarının sayısı ve kullanım miktarı izlenebilir.

Erişim kısıtlamaları: Sağlayıcıya bağlı olarak IP, uygulama veya API bazında sınırlandırmalar uygulanabilir.

İstek sınırlandırma: API anahtarlarına özel kullanım limitleri tanımlanabilir.

API Key Kullanmanın Dezavantajları

API anahtarlarının bazı sınırlamaları bulunmaktadır.

Anahtarın Ele Geçirilmesi

Gizli anahtarın ele geçirilmesi, yetkisiz API kullanımına neden olabilir.

Son Kullanıcı Kimliğini Doğrulamaması

API anahtarları çoğunlukla uygulamayı veya projeyi tanımlar. Anahtarı kullanan kişinin kimliğini tek başına doğrulamaz.

Uzun Süreli Geçerlilik

Bazı API anahtarları, özel bir süre sınırı tanımlanmadıkça uzun süre kullanılabilir.

Yetki Yönetimi

API anahtarlarının izin kapsamları, kullanılan hizmetin desteklediği özelliklere bağlıdır.

Güvenli Saklama Gereksinimi

Anahtarların uygulama kodundan, günlük kayıtlarından ve yetkisiz erişimlerden korunması gerekir.

API Key Güvenliğinde Yapılan Yaygın Hatalar

API geliştirme sırasında karşılaşılan hatalar şunlardır:

  • API anahtarını herkese açık kod depolarına yüklemek.

  • Gizli anahtarı frontend JavaScript dosyalarına eklemek.

  • API anahtarını URL parametresinde taşımak.

  • HTTPS kullanmamak.

  • Bütün uygulamalarda aynı anahtarı kullanmak.

  • Anahtarlara gereğinden fazla yetki vermek.

  • Kullanılmayan anahtarları devre dışı bırakmamak.

  • API anahtarlarını uygulama günlüklerine yazdırmak.

  • Anahtar kullanımını takip etmemek.

  • Anahtar ele geçirildiğinde değiştirme işlemini geciktirmek.

Bu hatalar, yetkisiz erişim ve beklenmeyen API kullanım maliyetleri gibi sorunlara yol açabilir.

API Key Hangi Alanlarda Kullanılır?

API anahtarları farklı yazılım sistemlerinde kullanılabilir.

Harita servisleri: Harita verilerine ve coğrafi hizmetlere erişim.

Hava durumu servisleri: Hava durumu bilgilerinin API üzerinden alınması.

E-ticaret sistemleri: Ürün, stok ve sipariş entegrasyonları.

Ödeme sistemleri: Uygun güvenlik kontrolleriyle sunucu taraflı ödeme hizmeti entegrasyonları.

Yapay zekâ servisleri: Model ve diğer API hizmetlerine erişim.

Kurumsal yazılımlar: Farklı uygulamalar arasında veri aktarımı.

Otomasyon sistemleri: Zamanlanmış görevlerin harici API hizmetleriyle iletişim kurması.

Sonuç

API Key, uygulamaların veya projelerin API hizmetlerine erişirken kendilerini tanıtmak için kullandığı bir anahtar değeridir.

API anahtarları; istemci tanımlama, erişim kontrolü, kullanım takibi ve istek sınırlandırma gibi işlemlerde kullanılabilir.

Ancak API anahtarlarının güvenliği, yalnızca anahtarın gizli tutulmasına bağlı değildir. Güvenli saklama, HTTPS kullanımı, erişim izinlerinin sınırlandırılması, anahtar değiştirme ve kullanım izleme işlemleri birlikte uygulanmalıdır.

Özellikle gizli API anahtarlarının frontend kodlarında veya herkese açık kaynak depolarında bulunmaması gerekir.

Kullanıcı kimliğinin doğrulanması veya ayrıntılı yetkilendirme gerektiren sistemlerde API Key mekanizması, uygun kimlik doğrulama ve yetkilendirme yöntemleriyle desteklenmelidir.

 


Alıntı