.Net Core MicroService - JWT Authentication

Ayberk Cakar
Innovile
Published in
2 min readMay 19, 2021

Yazılım dünyasında, oluşturduğumuz web tabanlı uygulamaların güvenliğini sağlamak için çeşitli yöntemler bulunmaktadır. Bu yazımızda .Net Core Microservice mimari yapısında ( JSON Web Token ) JWT ile nasıl Authentication sağlayabiliriz bunu inceleyeceğiz.

İlk önce mimariden bahsetmek istiyorum. Yukarıda görmüş olduğumuz mimaride ilk olarak “Identity Microservice” oturum açma isteği gönderiyoruz. Bilgilerimiz doğru ise servis bize “token”(anahtar) üretiyor ve geri gönderiyor. Bizde üretilmiş olan bu token’i diğer microservislere yapacağımız isteklerde header’a ekleyerek gönderiyoruz , böylelikle servislere erişim yetkisini elde etmiş oluyoruz.

JWT Token üç bölümden oluşur, bunlar; Header , Payload ve Signature. Header içinde kullanılan algoritma belirtilmektedir. Payload’da ise şifrelenmiş bilgilerimiz bulunmaktadır. Bu bilgileri şifreleyerek client tarafından server’a iletiriz , bu bilgiler ile yetki işlemlerinin kontrolleri sağlanması hedeflenilmektedir. Signature , imzanın yer aldığı kısımdır. JSON Web Token’i jwt.io üzerinden inceleyebilirsiniz.

Sign-in isteğinde kullanıcı bilgileri doğrulandıktan sonra yukarıda bulunan örnek method ile ( ben sade bir örnek verdim , siz istediğiniz şekilde özelleştirebilirsiniz ) bir token üretiyoruz. “SECRET-KEY” yazan alana kendinize özel bir secret key , issuer ve audience için kendinize özel değerler verebilirsiniz. Claims içerisine payload içerisinde bulunmasını istediğiniz verilerinizi verebilirsiniz. Expires ise token’imizin geçerlilik süresini oluşturmaktadır.

Oluşan bu token’imizi , isteğimizin header alanına “Authorization” değişkenine “Bearer “ + token olacak şekilde ekleyerek gönderiyoruz. Örnek verecek olursak yukarıda bulunan görseldeki şekilde göndermemiz gerekmektedir.

Gelelim MicroService üzerinden Autentication kontrolü yapmaya.

Yukarıda paylaştığım kodu microservice startup.cs içerisinde service alanına ekliyoruz. ValidIssuer , ValidAudience ve IssuerSigningKey alanlarının JSON Web Token’i oluştururken kullandığımız değerler ile aynı olmak zorundadır.

Yukarıda paylaştığım kod bloğunu da startup.cs içerisinde app alanına ekliyoruz. Arkadaşlar burada önemli bir noktaya dikkat çekmek istiyorum. Paylaştığım sırada eklenmesi gerekiyor , sırası farklı olduğunda hata alabilirsiniz çünkü middleware’lerde işlem sırası önemlidir , bizim bu işlem sırasına uymamız gerekmektedir.

İsterseniz Autentication için class üzerine [Authorize] yazarak , bütün class için kontrol yapabilirsiniz.

İstersenizde method üzerine [Authorize] yazarak , sadece belirtilen medhot için kontrol yapabilirsiniz.

İşlemleri doğru bir şekilde gerçekleştirirseniz authorize sağlayabileceksiniz.

Eğer yanlış istek atarsanız ( yanlış bilgiler vs.), token süreniz geçmişse veya işlem adımlarını yanlış uyguladıysanız size dönen response 401 Unauthorized olacaktır. Eğer 401 Unauthorized yanıtı alırsanız işlem adımlarını veya istek atma yönteminizi tekrar kontrol etmelisiniz.

Yazımı okuduğunuz için teşekkür ederim :)

İyi günler , İyi çalışmalar 😊

--

--