Türkçe
  • express-js
  • javascript
  • öğretici
  • kimlik doğrulama
  • jwt
  • kimlik
  • api

Express.js API'nizi JWT ve Logto ile Koruyun

Express.js API uç noktalarınızı JSON Web Token (JWT) ve Logto ile nasıl koruyacağınızı öğrenin.

Gao
Gao
Founder

Giriş

Bir web uygulaması geliştirirken, API uç noktalarınızı yetkisiz erişimlere karşı korumanız çok önemlidir. Diyelim ki çevrimiçi bir alışveriş sitesi kuruyorsunuz; siber hırsızların API'nizi istismar etmesini kesinlikle istemezsiniz.

Kullanıcıların belirli eylemleri gerçekleştirmeden önce oturum açması gereken bir kullanıcı kimlik doğrulaması ile bir Express.js uygulaması geliştirdiğinizi varsayalım. Değilse, Logto ile yolculuğunuza başlayabilirsiniz. Kullanıcı kimlik doğrulama akışını oluşturmak için sadece birkaç satır koda ihtiyaç duyarsınız.

Ancak kullanıcı kimlik doğrulamasından sonra bile, API uç noktalarınızı korumak için çeşitli seçeneklerle karşılaşırsınız. Maalesef, bu seçeneklerin çoğunun dezavantajları vardır:

  • Oturum tabanlı kimlik doğrulama: API'nizi bir oturum deposuna bağlamak, ölçeklenebilir değildir ve mikro hizmetlere uygun değildir.
  • Bir kimlik doğrulama hizmeti çağırmak: Bu, ekstra bir ağ çağrısı gerektirir, gecikme ve maliyetleri artırır. Bazı kimlik doğrulama hizmetleri, API çağrı hacmine göre ücret alır ve bu da önemli maliyetlere yol açabilir.

Bu eğitimde, JSON Web Tokens (JWT) ve Logto kullanarak API uç noktalarınızı nasıl güçlendirebileceğinizi göstereceğiz. Bu yaklaşım, ölçeklenebilirlik ve minimal ek maliyetler sunar.

Ön Koşullar

Başlamadan önce, aşağıdakilere sahip olduğunuzdan emin olun:

Logto'da API kaynağınızı tanımlayın

Logto, API uç noktalarınızı güvence altına almak için RFC 8707: OAuth 2.0 için Kaynak Göstergeleri'ndan tam anlamıyla yararlanır. Bu, API kaynaklarınızı gerçek URL'leriyle tanımlayabileceğiniz anlamına gelir.

Logto Konsolunda "API kaynakları" sekmesine gidin ve yeni bir kaynak oluşturmak için "API kaynağı oluştur" üzerine tıklayın. Örneğin, /api/products uç noktasını korumak istiyorsanız, https://yourdomain.com/api/products URL'sini tanımlayıcı olarak kullanabilirsiniz.

API kaynağı oluştur

İstemci uygulamanızda bir erişim tokenı alın

Devam etmek için, Logto SDK'sını istemci uygulamanıza entegre etmeniz gerekecek. Bu uygulama, Express.js arka ucunuzdan farklı olabilir; örneğin, arka uç API sunucusu olarak Express.js kullanan bir React uygulamanız olabilir.

Bu izni talep etmek için Logto SDK yapılandırmasını, API'niz için bir erişim tokenı talep etmek istediğinizi Logto'ya bildirecek şekilde ayarlamanız gerekecek. İşte React kullanan bir örnek:

Kullanıcı Logto ile oturum açtığında, Logto SDK'sı içindeki isAuthenticated true olur:

Artık getAccessToken metodunu kullanarak API'niz için bir erişim tokenı alabilirsiniz:

Son olarak, API'ye istek gönderirken bu erişim tokenını Authorization başlığına dahil edin:

API'nizde erişim tokenını doğrulayın

Express.js uygulamanızda, JWT doğrulaması için jose kütüphanesini kurun:

Bearer kimlik doğrulamasını kullandığımız için, erişim tokenını Authorization başlığından çıkarın:

Daha sonra, erişim tokenını doğrulamak için bir ara yazılım oluşturun:

Artık bu ara yazılımı kullanarak API uç noktalarınızı koruyabilirsiniz:

Bu yaklaşımla, her istekte Logto sunucusuyla iletişim kurmanıza gerek kalmaz. Bunun yerine, Logto sunucusundan JSON Web Key Set (JWKS) bir kerelik alır ve ardından erişim tokenlarını yerel olarak doğrularsınız.

Rol tabanlı erişim kontrolü

Bu noktaya kadar, sadece kullanıcının Logto ile oturum açtığını doğruladık. Henüz kullanıcının API uç noktasına erişim iznine sahip olup olmadığını bilmiyoruz. Bunun nedeni, Logto'nun herhangi birine mevcut bir API kaynağı için erişim tokenı almasına izin vermesidir.

Bunu ele almak için, rol tabanlı erişim kontrolü (RBAC) kullanabiliriz. Logto'da, roller tanımlayıp onlara izinler atayabilirsiniz. Logto'da roller ve izinlerin nasıl tanımlanacağını öğrenmek için bu öğreticiyi inceleyin.

Rolleri ve izinleri tanımladıktan sonra, LogtoProvider bileşenine scopes seçeneğini ekleyebilirsiniz:

Logto daha sonra uygun kapsam(lar) ile kullanıcılara erişim tokenı verecektir. Örneğin, bir kullanıcı yalnızca read:products kapsamına sahipse, erişim tokenı yalnızca bu kapsamı içerecektir:

Bir kullanıcı hem read:products hem de write:products kapsamlarına sahipse, erişim tokenı her iki kapsamı da içerir ve bir boşluk karakteriyle birbirinden ayrılır:

Express.js uygulamanızda, API uç noktasına erişim yetkisi vermeden önce erişim tokenının doğru kapsam(ları) içerip içermediğini doğrulayabilirsiniz:

Sonuç

API uç noktalarını korurken aynı zamanda ölçeklenebilirliği sağlamak göz korkutucu bir görev olabilir. Logto'da, geliştiriciler için istek kimlik doğrulamasını basitleştirmeyi amaçlıyoruz, böylece iş mantığınıza daha fazla odaklanabilirsiniz.

Herhangi bir sorunuz varsa, Discord sunucumuza katılmaktan çekinmeyin. Topluluğumuz sizi her zaman yardımcı olmaktan mutluluk duyar.