OpenID Connect (OIDC) protokolünde erişim tokenleri, yenileme tokenleri ve kimlik tokenlerini anlamak
OpenID Connect (OIDC) Protokolü, kimlik yönetimi için yaygın olarak kabul edilen bir standart haline gelmiştir. Ancak gerçekten bu tokenlerin rollerini ve özelliklerini anlıyor musunuz?
OIDC, OAuth 2.0 ve tokenler
OpenID Connect Protokolü, OIDC olarak da bilinir, kimlik yönetimi için temel bir çerçeve sağlayan yaygın bir standart olarak ortaya çıkmıştır. Bu, iyi bilinen OAuth 2.0 protokolü üzerine inşa edilmiş bir kimlik doğrulama katmanıdır. OAuth 2.0 sadece kaynak yetkilendirmesi için kullanılırken, OIDC, yeni tanıtılan kimlik tokeni yardımıyla istemci kimlik doğrulamasını standartlaştıran ve güçlendiren protokoldür.
Bekleyin... OAuth döneminde erişim tokenleri ve yenileme tokenlerini duymuş olabilirsiniz, şimdi OIDC'de yeni bir kavram mı geliyor? Bu tokenler arasındaki farkları gerçekten anlıyor musunuz?
OIDC'de erişim tokenleri, yenileme tokenleri ve kimlik tokenleri nelerdir?
Pratik bir senaryo ile başlayalım.
Tipik bir istemci-sunucu uygulaması geliştirdiğinizi hayal edin ve bunlar arasında RESTful API'ler aracılığıyla iletişim kuruyorsunuz. API'lerinizin çoğunu özel tutmak, sadece yetkilendirilmiş istemcilerin erişmesine izin vermek istiyorsunuz. Sunucunuza gelen API isteklerini yetkilendirmek ve istemciyi kimlik doğrulamak için bir mekanizmaya ihtiyacınız olacak.
Ideally, RESTful API'leriniz durum bilgisi taşımamalıdır, yani sunucu herhangi bir istemci oturumu bilgisini saklamamalıdır. Geçerli bir istek geldiğinde sunucu sadece istenen veriyi yanıtlamalıdır. İşte burada tokenler devreye giriyor. Peki, böyle bir durumda hangi tür token kullanmalısınız?
Erişim tokenleri API'lerinizi korumak için kullanılır
OAuth 2.0 ve OIDC'de, her korunan API bir kaynak olarak ele alınır. Erişim tokeni, istemcinin bir API kaynağı istendiğinde sunucuya ilettiği token olup, genellikle istek başlığı ve JWT formatında iletilir.
Sunucu tarafında, bir istek geldiğinde sunucu sadece gelen isteğin geçerli bir erişim tokeni taşıyıp taşımadığını doğrulaması yeterlidir. Doğrulama süreci genellikle JWT tokenini çözümlemeyi, imzayı ve sona erme süresini doğrulamayı, ayrıca istemcinin gerekli yetkileri olduğundan emin olmak için kapsam iddiasını kontrol etmeyi içerir.
Ancak, şu soruyu merak edebilirsiniz: İstemci uygulamam başarılı bir oturum açma işlemi sonrası geçerli bir erişim tokenine sahip olabilir ve erişim tokenini kullanarak sunucu API'lerini istekte bulunabilir; bu yeterli değil mi? Neden diğer tokenlere ihtiyacım var?
Gerçekten, geçerli bir soru, ve bunu adım adım açıklayalım.
Yenileme tokenlerine neden ihtiyacımız var?
Teknik olarak erişim tokenleri sistemi çalıştırmaya yetecek minimum gereksinimleri karşılıyor olabilir, ancak güvenlik endişeleri nedeniyle erişim tokenlerinin geçerlilik süresi genellikle çok kısadır (tipik olarak bir saat). Bu yüzden yalnızca erişim tokenlerimiz olduğunu hayal edin, her erişim tokeni süresi dolduğunda son kullanıcıların yeniden kimlik doğrulaması yapması gerekecektir. Modern tek sayfa web uygulamaları (SPA'lar) ve özellikle mobil uygulamalar için, sık sık oturumdan atılmak oldukça acı verici bir kullanıcı deneyimidir, her ne kadar kullanıcı güvenliğini korumaya çalışsak da.
Bu nedenle, token güvenliği ve kullanıcı kolaylığı arasında bir dengeye ihtiyacımız var. İşte bu yüzden yenileme tokenleri tanıtılmıştır.
Yenileme tokenlerinin daha uzun ömre sahip olmasının nedeni nedir?
Erişim tokenleri API kaynaklarına erişim için kullanılır, bu yüzden kısa ömürlü olmaları sızdırılma ya da tehlikeye girilme riskini azaltmaya yardımcı olur. Öte yandan, yenileme tokenleri sadece yeni erişim tokenleri almak için kullanıldığı için erişim tokenleri kadar sık kullanılmazlar ve bu yüzden maruz kalma riski azalır. Bu nedenle, daha uzun bir geçerlilik süresi olması yenileme tokenleri için kabul edilebilir olarak görülür.
Yenileme token güvenliğini sağlama
Yenileme tokeni de istemci tarafında saklandığı için, özellikle tek sayfa web uygulamaları (SPA'lar) ve mobil uygulamalar gibi halka açık istemciler için bunların tehlikeye girmemelerini sağlamak zorlayıcıdır.
Logto'da, yenileme tokenleri otomatik döndürme mekanizması varsayılan olarak etkindir. Bu mekanizma, yetkilendirme sunucusunun belirli kriterler karşılandığında yeni bir yenileme tokeni çıkaracağı anlamına gelir:
- Tek sayfa uygulamaları: Gönderici kısıtlamalı istemci olarak kabul edilen bu uygulamalar, yenileme tokeni döndürmeyi zorunlu kılar. Yenileme tokeninin yaşam süresi (TTL) belirtilemez.
- Yerli uygulamalar ve geleneksel web uygulamaları: Yenileme token döndürmesi doğrudan etkindir ve TTL'lerinin %70'ine ulaşınca otomatik olarak yenilenir. Daha fazla bilgi.
Yetkilendirme sunucusundaki uygulama detayları sayfasında yenileme tokeni döndürme seçeneğini devre dışı bırakma seçeneğiniz olsa da, bu koruyucu önlemi devam ettirmeniz şiddetle önerilir.
Kimlik tokeni nedir ve neden önemlidir?
Kimlik tokeni, kimlik doğrulaması yapılan kullanıcı hakkında kimlik bilgileri sağlayan OIDC'nin benzersiz bir özelliğidir.
Erişim tokenleri korunan kaynaklara erişim sağlamak için kullanılırken ve yenileme tokenleri yeni erişim tokenleri elde etmek için kullanılırken, kimlik tokenleri genellikle istemci tarafında kullanıcı bilgilerini önbelleğe almak için kullanılır, böylece yetkilendirme sunucusundan kullanıcı verileri için ek istekte bulunma ihtiyacını azaltır. Çoğu durumda, kimlik tokenine sahip olmak, kullanıcının kimlik doğrulaması yapılmış olmasıyla eşdeğer olduğunu bile söylemek güvenlidir.
Tokenlerle ilgili en iyi uygulamalar
- HTTPS kullanın: İstemci ile yetkilendirme sunucusu arasındaki iletişimi güvence altına almak için her zaman HTTPS kullanın. Bu, yetkisiz kişilerin tokenleri ele geçirmesini ve çalmasını önler.
- Doğru token süresi ayarlayın: Erişim tokenlerinin kısa bir ömre sahip olması, maruz kalma riskini en aza indirmek gerekir. Yenileme tokenleri daha uzun bir geçerlilik süresine sahip olabilir.
- Yenileme token döndürmesini etkinleştirin: Yenileme token sızdırılması riskini azaltmak için yenileme token döndürmesini uygulayın.
- İnce ayarlı erişim kontrolü kullanın: Erişim tokenlerinin izinlerini sınırlamak için ince ayarlı kapsamlar kullanın. Kullanıcı uygulaması için gerekli izinleri isteyin. "Tüm" ya da "yönetici" kapsamlarını kullanmaktan kaçının, izin denetimlerinin çoğunu atlatmak zorunda kalmadıkça bu mutlak gerekmedikçe tercih edilmemelidir.
OIDC'deki erişim tokenleri, yenileme tokenleri ve kimlik tokenlerinin anahtar farklılıklarının özeti
OIDC protokolünde, yenileme tokenleri, erişim tokenleri ve kimlik tokenleri birlikte güvenli ve sorunsuz kullanıcı kimlik doğrulaması sağlar.
- Erişim tokenleri korunan kaynaklara erişim izni verir.
- Yenileme tokenleri yeni erişim tokenleri için kullanıcı müdahalesini ortadan kaldırır.
- Kimlik tokenleri istemci tarafında önbelleğe alınmış kullanıcı bilgileri sağlar, böylece performansı artırır.
Bu tokenlerin rolünü ve önemini anlamak, uygulamalarında OIDC kimlik doğrulamasını uygulayan geliştiriciler için kritik öneme sahiptir.