Json Web Token (JWT) Nedir? .Net Core (5.0) Ortamında Nasıl Kullanılır?

Merhaba bu gönderide jwt hakkında bilgi vereceğim ve bununla ilgili örnek bir proje yapacağız

JWT Nedir?

Jwt, sunucu (server) ve istemci (client) arasında güvenlik bilgilerini paylaşmak için kullanılan açık bir standarttır. Her jwt bir json objesi içerir bu json objelerinde de bazı talepler (claims) vardır. Taleplerin değiştirilememesini sağlamak için de bir kriptografik algoritma ile şifrelenir.

Örnek Senaryo

Tüm ürünlerinizin döndüğü bir api olduğunu varsayalım bu servisden ürünleri çekebilmek içinde gerekli şart, kayıtlı kullanıcı olmak ve rolümüzün de yetkili personel olması. Her api isteğinde parametre olarak username ve şifre mantıken gönderilemez işlemi yapmaya hak kazanmak için :d bir tane biletimizin (token) olması gerekiyor bu bilet ile api isteklerini güvenli ve sorunsuz bir şekilde yapabiliriz. Token alacağımız servise username ve şifremizi güvenli bir şekilde göndeririz bilgilerimiz doğru ise servis bize bir bilet verir bu bilet bir Json Web Token’dir. (İleriki kısımlarda ayrıntıları var) Ürünler servisinin header bölümüne bu bileti ekleyerek isteği göndeririz eğer bilet geçerli ise servis ürünleri döner.

Örnek Bir Jwt Objesi

jwt objesi base64 ile şifrelenmiş üç bölümden oluşur:

  • Header
    • Şifreleme algoritması hakkında bilgi verir
  • Payload
    • Id, Username, Name gibi kullanıcı bilgileri döner
  • Verify Signature
    • Bu kısım en önemli yer, burayı dijital imza olarak tanımlayabiliriz. serverdan belirli bir key ile hashleyerek imza oluştulur bu imza sayesinde server doğrulama yapar. Örneğin name’i değiştirip bir encoding yaparsam tokenler değişecektir ve doğrulama başarısız olacaktır.

Asp.Net 5.0 Api Projesi ile Nasıl Kullanılır

Bundan sonraki anlatım kod üzerinden devam edeceğim, Şimdi Basit bir web api projesi yaparak kod tarafında nasıl kullanıldığını inceleyelim.

Visual studio üzerinden bir Asp.net 5.0 web api projesi oluşturarak başlıyoruz.

UserService adında bir sınıf ekleyelim.

Jwt ile ilgili bazı bilgililerimizi appsettings.json dosyasında tutacağız.

JwtSettings objesini dotnet içinde daha kolay erişebilmek için bir sınıf yaratacağız ve daha sonra middleware’de bu sınıfla ilişkilendireceğiz.

Jwt ile ilgili konfigürasyonları yapalım. Middlewarede aşağıdaki gibi tanımları ekliyoruz

Startup.cs’deki configure içine app.UseAuthentication() ve app.UseAuthorization() eklemelerini yapmayı unutmayınız

ilk satırda yukarıda bahsettiğim gibi appsettings.json‘daki JwtSettings sınıfı tanımladık. Token Validation Parametrelerinde yayımcı, izleyici(auidence) ve yayımcıya(issuer) özgün imzalı keyi tanımladık.

JwtHelper adında bir sınıf ile token üretimi yapacağız

Claim kısmına iki tane unique değer ekledik böylece tokenlerin aynı olabilme ihtimalini sıfırladık. settings kısmında yazdığımız bilgiler ve Sha256 algoritmasını kullanarak bir token nesnesi oluşturduk fakat bu token bilgisinde nerdeyse bütün bilgiler olduğu için WriteToken metodu ile son kullanıcıya geçecek tokeni oluşturmuş olduk.

AccountController ekleyip bir token almaya deneyelim.

Claim olarak username ve displayname ekledim isterseniz roles türünde rolleri de tanımlayabilrsiniz.

Postman ile token isteği

Aldığımız tokeni jwt.io sayfasında decode edince aşağıdaki sonuç çıkacaktır.

Tokeni aldık şimdi sıra kullanmaya geldi. Dotnetin otomatik oluşturduğu WeatherForecast adında bir api authorize attribute koyacağız

Postman üzerinde WeatherForecast’e istek gönderelim

Aldığımız tokeni headerse bearer token etiketine yazdık ve doğrulama başarılı oldu. Eğer ki tokende ufak bir değişiklik yaparsak 401 dönecektir.

Proje linki : okankrdg/JwtExampleProject (github.com)
Yazının sonuna geldik başka bir makalede görüşmek üzere 🙂


You may also like...

6 Responses

  1. Recep dedi ki:

    Merhaba çok araştırdım ama bir sonuç elde edemedim. Bir Mvc Web App oluşturup Authentication ve işte rölü admin olanlar gibi bir senaryoyu hayata geçiremedim acaba yardımcı olurmusunuz. Teşekkürler.

  2. ahmet gürbüz dedi ki:

    deli olacam tokeni olusturuyorum ama kullanamıyorum hatta proje indiriyorum örnek calıstırıyorum localde postman dan baglanıyorum yine olmuyor anlamadım gitti bir türlü.

  3. Furkan Korkmaz dedi ki:

    merhaba, ben sizin projenizi indirdim ve token aldıktan sonra diger method hiç bir sekilde tepki vermiyor.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Turkish