Application Security

OAuth2 ve OpenID Connect'i Ustalıkla Kullanma: Güvenli Kimlik İçin Geliştirici Rehberi

Modern uygulama geliştirme ortamında güvenlik sadece bir özellik değil, temeldir. Karmaşık, dağıtık sistemler kuran geliştiriciler için kullanıcı kimliğini ve erişim kontrolünü manuel olarak yönetmek genellikle felaketle sonuçlanır. İşte OAuth 2.0 ve OpenID Connect (OIDC) devreye girdiği yer burasıdır. Sıkça birlikte kullanılsa da, bu iki protokol farklı amaçlara hizmet eder. Bunları karıştırmak, yetkisiz veri erişiminden oturum ele geçirmeye kadar kritik güvenlik açıklarına yol açabilir.

Bu yazı, farkları açıklamayı, arka planda nasıl çalıştıklarını anlatmayı ve uygulamalarınızda bunları güvenli bir şekilde uygulama konusunda pratik bilgiler sunmayı amaçlamaktadır.

Ayrışımı Anlamak: Yetkilendirme vs. Kimlik Doğrulama

Bu protokolleri ustalıkla kullanmak için, her birinin hangi sorunu çözdüğünü anlamalısınız. VIP alanı ve üyelik sistemi olan bir kulüple düşünün.

OAuth 2.0 bir yetkilendirme çerçevesidir. Ana bilgisayar kaynaklarına kısıtlı erişim için bir yöntem sağlar. Benzetmemizde OAuth, kapıda kimliğinizi kanıtladıktan sonra aldığınız bilek banttır; bu size VIP salonuna girmenizi ve premium bardan içki içmenizi sağlar. Şu soruyu yanıtlar: "Bu uygulama kullanıcı adına ne yapabilir?"

OpenID Connect (OIDC), OAuth 2.0'nın üzerinde çalışan bir kimlik doğrulama katmanıdır. Kimlik bilgileri sağlar. Benzetmemizde OIDC, içeri giren kişinin gerçekten kim olduğunu iddia ettiği kişi olup olmadığını doğrulamak için bekçi tarafından kontrol edilen kimlik kartıdır. Şu soruyu yanıtlar: "Bu kullanıcı kim?"

Giriş için yalnızca OAuth 2.0 kullanmak yaygın bir anti-patterndir (kötü uygulama). Bu, kullanıcıyı kullanıcı kimliğiyle tanımlamanıza izin verse de, OIDC'nin sağladığı ek talepler olmadan bu kimliğin bütünlüğünü garanti etmez.

OpenID Connect Nasıl Çalışır

OIDC, Kimlik Sağlayıcısı (IdP) tarafından imzalanmış bir JSON Web Token (JWT) olan bir id_token ekleyerek OAuth 2.0'yı genişletir. Bu token, konu tanımlayıcısı, yayıncı, hedef kitle ve son kullanma süresi gibi kimlik doğrulama olayı hakkında talepler içerir.

Tek Sayfa Uygulamaları (SPA'lar) ve mobil uygulamalar için en yaygın akış, PKCE ile Yetkilendirme Kodu Akışı'dır (Proof Key for Code Exchange). PKCE, herkese açık istemcilerin yetkilendirme kodu dinleme saldırılarına karşı korunması için esastır.

İşte OAuth 2.0 yetkilendirme isteği parametrelerinin basitleştirilmiş bir temsili:

GET https://auth.example.com/authorize
  ?response_type=code
  &client_id=your_client_id
  &redirect_uri=https://your-app.com/callback
  &scope=openid profile email
  &state=random_state_string
  &code_challenge=e7b4...
  &code_challenge_method=S256

scope=openid parametresine dikkat edin. Bu, IdP'ye standart bir OAuth2 yetkilendirme isteği yerine bir OIDC akışı başlattığınızı bildiren sinyaldir. Yanıt, hem API erişimi için bir erişim token'ı hem de kimlik için bir ID token'ı içerecektir.

Güvenlik En İyi Uygulamaları

Bu protokolleri doğru bir şekilde uygulamak, güvenlik standartlarına sıkı bir uyum gerektirir. İşte vazgeçilmez üç uygulama:

  1. ID Token'ını Her Zaman Doğrulayın: Token'a kör bir şekilde güvenmeyin. İmzayı IdP'nin genel anahtarlarını kullanarak doğrulayın (/.well-known/openid-configuration uç noktası aracılığıyla elde edilir). iss (yayıncı) ve aud (hedef kitle) taleplerinin beklentilerinizle eşleştiğini kontrol edin.
  2. Her Yerde HTTPS Kullanın: Yetkilendirme kodları ve token'lar asla şifrelenmemiş kanallar üzerinden iletilmemelidir. Bu, bir temel gereksinimdir, bir seçenek değildir.
  3. Doğru Token Depolaması Uygulayın: SPA'lar için token'ları XSS saldırılarına açık olan localStorage veya sessionStorage yerine bellekte saklayın. Sunucu taraflı uygulamalar için HTTP-only, Secure çerezleri kullanın.

Sonuç

OAuth 2.0 ve OpenID Connect, doğru şekilde anlaşıldığında ve uygulandığında, geliştiricilerin tekerleği yeniden icat etmeden güvenli, ölçeklenebilir kimlik çözümleri oluşturmalarını sağlayan güçlü araçlardır. OAuth'u bir yetkilendirme protokolü ve OIDC'yi bir kimlik doğrulama protokolü olarak ele alarak, uygulamalarınızın kullanıcı kimliklerinin bütünlüğünü korurken kaynaklara uygun erişim sağladığından emin olursunuz. Web evrilmeye devam ettikçe, bu standartları ustalıkla kullanmak, ciddi bir uygulama geliştiricisi için kritik bir beceri olmaya devam etmektedir.

Share: