API yetkilendirme yöntemleri
Bu makalede, üç yaygın API yetkilendirme mekanizmasını, API anahtarlarını, temel kimlik doğrulamayı ve OAuth JWT jetonlarını keşfedeceğiz. Ayrıca, sonunda Logto'nun OAuth JWT jetonlarını kullanarak API'lerinizi nasıl koruyabileceğinizi konuşacağız.
Giriş
Günümüzde, API'ler modern uygulamaların bel kemiğidir. Verilere ve işlevlere arka uç hizmetlerden erişmenin birincil yolu onlar aracılığıyladır. API'ler, farklı taraflardan gelen yazılım sistemlerinin birbirleriyle iletişim kurmasına ve veri paylaşmasına olanak tanır, bu da onları işletmeler için vazgeçilmez kılar. Bununla birlikte, API'ler saldırganlar için yaygın bir hedef haline gelmiştir. API koruma ihtiyacı her zamankinden daha güçlü.
API koruma, API'leri yetkisiz erişim, kötüye kullanım ve saldırılardan koruma sürecidir. Herhangi bir API stratejisinin kritik bir bileşenidir. Bu makalede, üç yaygın API koruma mekanizmasını keşfedeceğiz: API anahtarları, temel kimlik doğrulama ve OAuth JWT jetonları. Son olarak, Logto'nun API'lerinizi OAuth JWT jetonları kullanarak nasıl koruduğunu da göstereceğiz.
API Anahtarları
API anahtarı, API'leri güvence altına almak için en basit ve yaygın kullanılan yöntemdir. Bir API anahtarı, API sağlayıcısı tarafından oluşturulan ve yetkili kullanıcılarla paylaşılan uzun bir karakter dizisidir. Bu anahtar, API'ye erişirken istek başlığına dahil edilmelidir. API anahtarları basit ve temel güvenlik ihtiyaçları için etkilidir. Örneğin, Google Maps API ve AWS gibi popüler hizmetler, API anahtarları sağlayarak erişimi kontrol eder ve kullanımı izler. Ancak, güvenlik açısından sınırlamaları vardır. Genellikle makineden makineye iletişim için kullanılırlar.
Örnek:
Artıları:
- Uygulaması basit: API anahtarları uygulamak ve kullanmak kolaydır. İsteğe bir anahtar ekleyerek işlem yapılır, bu da geliştiriciler ve müşteriler için anlaşılır ve kullanımı kolay bir yöntemdir.
- İzlemesi kolay: API anahtarlarını izlemek kolaydır. Her bir anahtarın kullanımını takip edebilir ve gerektiğinde iptal edebilirsiniz.
- Etkili oran sınırlaması: API anahtarları, oran sınırlaması için etkilidir. Kötüye kullanımı önlemek için anahtar başına istek sayısına bir sınır koyabilirsiniz.
- Hassas olmayan veriler için uygun: API anahtarları, daha düşük güvenlik gereksinimleri olan, hassas olmayan veriler veya herkese açık API'ler için uygundur.
Eksileri:
- Sınırlı güvenlik: API anahtarları, özellikle istemci tarafı uygulamaları için hassas veriler için yeterince güvenli değildir. Genellikle makineden makineye iletişimlerde kullanılır.
- Kullanıcı Kimlik Doğrulaması için Uygun Değil: API anahtarları, uygulamalara veya sistemlere değil, bireysel kullanıcılara bağlıdır; böylece, belirli kullanıcıları tanımak veya eylemlerini izlemek zorlaşır.
- Jeton süresi dolmaz: API anahtarları genellikle statiktir ve süresi dolmaz. Bir anahtar tehlikeye girerse, manuel olarak yeniden üretilmedikçe süresiz olarak kötüye kullanılabilir.
Temel kimlik doğrulama
Temel kimlik doğrulama, API'leri güvence altına almak için başka bir yaygın yöntemdir. HTTPs protokolünde yerleşik basit bir kimlik doğrulama şemasıdır. İstek başlığında bir kullanıcı adı ve parola göndermeyi içerir. Sunucu daha sonra kimlik bilgilerini doğrular ve geçerli oldukları takdirde istenen kaynağı döner. Örneğin, birçok web uygulaması ve RESTful API'ler, kullanıcıları hızla ve kolayca kimlik doğrulamak için temel kimlik doğrulamayı kullanır. Temel kimlik doğrulama, bir statik anahtar yerine kullanıcı adı ve parola kullandığından API anahtarlarına göre daha güvenlidir. Ancak yine de hassas veriler için yeterince güvenli değildir. İstemci kimlik bilgileri düz metin olarak iletildiğinden, müdahale tehlikesi vardır. Temel kimlik doğrulama, ağ bağlantısının güvenli olduğu dahili sistemler için uygundur, örneğin makineden makineye.
Örnek:
veya
Artıları:
- Daha Güçlü Güvenlik: Temel kimlik doğrulama, bir statik anahtar yerine kullanıcı adı ve parola kullandığından API anahtarlarına göre daha güvenlidir.
- Yaygın destek: Temel kimlik doğrulama yaygın olarak benimsenmiştir ve çoğu web sunucusu ve tarayıcı tarafından desteklenir.
- Basitlik: API anahtarları gibi, temel kimlik doğrulama da nispeten basit bir şekilde kurulup kullanılabilir.
Eksileri:
- Kimlik bilgisi açığı: Temel kimlik doğrulama, kimlik bilgilerini düz metin olarak iletir, bu nedenle güvenli bir bağlantı (HTTPS) olmadan kullanıldığında yakalama riskine karşı savunmasızdır.
- Jeton süresi dolmaz: Temel kimlik doğrulama, jeton süresinin dolmasını desteklemez. Bir jeton tehlikeye girdiğinde, manuel olarak yeniden üretilmedikçe süresiz olarak kötüye kullanılabilir.
OAuth JWT jetonları
RFK 7519 tarafından tanımlanan JSON Web Token (JWT), taraflar arasında bir JSON nesnesi olarak bilgi güvenli bir şekilde iletmeye yönelik açık bir standarttır. Web uygulamalarında ve API'lerde yaygın olarak kimlik doğrulama ve yetkilendirme için kullanılır.
İmzalı bir JWT'nin aşağıdaki formatı vardır:
Üç nokta (.
) ile ayrılmış üç kısımdan oluşur: başlık, yük ve imza.
İşte bir JWT örneği:
- başlık: jetonun türü ve imzalamada kullanılan karma algoritması gibi bilgileri içerir.
- yük: kullanıcı ve diğer verilerle ilgili beyanları (ifadeler) içerir.
- imza: başlık ve yükün bir karma değeridir ve gizli bir anahtarla imzalanmıştır.
OAuth, API'leri güvence altına almak ve erişim devri sağlamak için kapsamlı bir açık standarttır. Web siteleri veya uygulamaların diğer web sitelerindeki bilgilerini, parolalarını vermeden, erişim sağlamasına izin vermek için yaygın olarak kullanılır.
JWT ile birlikte kullanıldığında, OAuth JWT jetonları güçlü bir güvenlik çözümü sunar. Her istekte kullanıcı adları ve parolalar gibi hassas bilgileri iletmek yerine, başarılı kimlik doğrulamanın ardından yetkili müşterilere OAuth JWT jetonları verilir. Bu jetonlar, kullanıcıyla ve yetkileriyle ilgili bilgileri içerir. Ayrıca JWT jetonları, değiştirilmesini önlemek için dijital olarak imzalanabilir ve süresi dolabilir. Bu, ek bir güvenlik katmanı sağlar.
OAuth JWT jetonlarının en büyük avantajlarından biri esneklikleridir. Web ve mobil uygulamalar, tek oturum açma çözümleri ve daha fazlası gibi çeşitli uygulama türleri için kullanılabilirler. Örneğin, Facebook, Twitter ve LinkedIn gibi büyük sosyal medya platformları, kullanıcıları kimlik doğrulamak ve üçüncü taraf uygulamaların kullanıcı verilerine güvenli bir şekilde erişmesini sağlamak için OAuth JWT jetonlarını kullanır.
Artıları:
- Gelişmiş güvenlik: OAuth JWT jetonları daha yüksek düzeyde güvenlik sağlar. Dijital olarak imzalanabilir ve şifrelenebilir, bu da yetkisiz erişim ve veri değiştirmenin riskini azaltır.
- Kullanıcı kimliği ve erişim kontrolü: JWT jetonları, kullanıcı kimlik bilgilerini taşıyabilir ve bir kullanıcının hangi eylemleri veya kaynaklara erişebileceğini belirten beyanları içerebilir.
- İnce ayrıntılı erişim kontrolü: JWT jetonları, ince ayrıntılı erişim kontrolü uygulamak için kullanılabilir. Örneğin, bir kullanıcının hangi kaynaklara erişebileceği ve bu kaynaklar üzerinde hangi eylemleri gerçekleştirebileceği belirlenebilir.
- Jeton süresi dolması: OAuth JWT jetonları, belirli bir süre sonra süresi dolacak şekilde ayarlanabilir, bu da kötüye kullanım riskini azaltır.
Eksileri:
- Karmaşıklık: OAuth JWT jetonları, API anahtarları ve temel kimlik doğrulamaya göre daha karmaşıktır. Kurulup kullanılması için ek adımlar gerekir.
- Jeton yönetimi: OAuth JWT jetonlarının yönetilmesi ve gerektiğinde iptali gerekir. Bu, çok sayıda kullanıcı ve müşteriye sahip büyük ölçekli uygulamalar için zor olabilir.
- Kaynak tüketimi: Jetonların oluşturulması ve doğrulanması, bazı performans ek yüklerine sahip olabilir, bu da yüksek trafiğe sahip senaryolarda bir sorun olabilir.
Logto API Koruma
Doğru kimlik doğrulama yöntemi seçimi, uygulamanızın özel gereksinimlerine ve güvenlik önlemlerine bağlıdır. API anahtarları basit, ancak daha az güvenlidir; temel kimlik doğrulama daha fazla güvenlik sunar ancak kullanıcı kimliğini içermez; OAuth JWT jetonları, güvenlik ve kullanıcı kimliği özellikleri sağlar ancak uygulama ve yönetim açısından karmaşıklığı artırır.
Logto, API'nizi OAuth JWT jetonları kullanarak korumak için basit ve güvenli bir yol sunar. Hem OAuth 2.0 hem de OpenID Connect (OIDC) standartlarını desteklemektedir ve ihtiyaçlarınıza en uygun kimlik doğrulama yöntemini seçmenize olanak tanır. Makineden makineye iletişim için client_credentials
akışını ve web uygulamaları için authorization_code
akışını kullanabilirsiniz.
Makineden makineye iletişim
Logto, makineden makineye türdeki uygulamalar için client_credentials
akışını kullanır. Bu akış, istemcinin istemci kimlik bilgilerini güvenli bir şekilde depolayabileceği gizli bir istemci olduğu arka uç sunucu iletişimi için uygundur. Bu ayrıca "iki bacaklı OAuth" olarak da bilinir, çünkü bir kullanıcı içermez. İstemci kimlik bilgileri, erişim jetonu almak için doğrudan bir yetkilendirme gereci olarak kullanılır.
Entegrasyon süreci basit ve anlaşılırdır:
- Logto Console'da bir API kaynağı oluşturun.
- Logto Console'da makineden makineye bir istemci oluşturun.
- Bir erişim jetonu almak için Logto jeton noktasına bir istek gönderin.
- Erişim jetonuyla korunan kaynağa erişin.
Lütfen daha fazla bilgi için makineden-makineye entegrasyon belgelerimizi inceleyin.
Web uygulamaları
Web uygulamaları gibi genel müşteriler için Logto, kullanıcıları kimlik doğrulamak için authorization_code
akışını kullanır. Bu akış, istemcinin istemci kimlik bilgilerini güvenli bir şekilde saklayamayacağı genel bir istemci olduğu web uygulamaları için uygundur. Bu ayrıca "üç bacaklı OAuth" olarak da bilinir, çünkü bir kullanıcı içerir. Kullanıcı, istemciyi kimlik doğrulamak ve yetkilendirmek için yetkilendirme sunucusuna yönlendirilir. İstemci daha sonra bir erişim jetonu almak için yetkilendirme kodunu kullanır.
Entegrasyon süreci makineden makineye akışına göre biraz daha karmaşıktır:
JWT jetonları kullanarak Logto ile Entregre Express.js API'nizi koruma hakkında kapsamlı bir örnek olarak Express.js API'nizi JWT ve Logto ile koruma makalemizi inceleyebilirsiniz.