1. Ana Sayfa
  2. DevOps
  3. JWT Token Otomasyonu (Bölüm 2)

JWT Token Otomasyonu (Bölüm 2)

images

İlk bölümde tasarımını yaptığımız otomasyonunun ikinci bölümünde çözüm sürecini hayata geçiriyoruz. İlk bölüme https://www.mshowto.org/jwt-token-otomasyonu-bolum-1.html Linkinden ulaşabilirsiniz.

  1. JWT Token yapısı; (*1)

    Öncelikle arayacağımız JWT Token’ın yapısını incelememiz gerekiyor. JWT Token aaaaa.bbbb.ccccc şeklinde nokta ile ayrılmış üç bölümden oluşmaktadır. Bu üç bölümden her bir bölüm Base64 formatında Encode edilmiştir.

    1. İlk bölüm Header olarak konumlandırılmıştır. Header Decode edilirse içerisinde tipinde formatında iki adet parametre barındırdığı anlaşılır. Bunlardan bir tanesi olan “alg:” Token’ın hangi güvenlik algoritması ile şifrelendiğinin standardının yazdığı parametredir. Diğer parametre olan “typ:” içerisinde de Token tipi yazmaktadır ki bu da sabit olarak “JWT” olarak belirlenmiştir.

    2. İkinci bölüm Payload olarak adlandırılmıştır. Payload Decode edildiğinde içerisinde JSON formatında; Token’ı üreten “iss:” (Issuer), Konusu “sub:” (Subject), Amaçlanan kullanıcı kitlesi “aud:” (Audience), Geçerlilik başlangıç tarihi “nbf: ” (Not Before), Son kullanma tarihi “exp:” (Expiration Time), Verildiği tarih “iat:” (Issued at), Serbest olarak tanımlanabilecek kimlik numarası “jti:”(JWT ID) ve isteğe bağlı tanımlanabilecek diğer parametreler bulunan bölümdür.

    3. Son bölüm Code olarak adlandırılmıştır. Bu bölümde Header “alg:” parametresindeki şifreleme formatı ile formatın tipine göre, Gizli Kelime (Secret Key) veya Sertifika (Certificate) ile şifrelenmiş içerik bulunmaktadır. Bu içerik ilgili şifre çözme algoritmasından geçirilerek Token’ın geçerli olup olmadığını anlamak için kullanılır.
  1. ’de (*2) RegEx (*3) Kullanarak dosyaların içerisinde arama yapmak;

    Genel olarak yapısını öğrendiğimiz JWT Token’ları dosyalar içinde bulmak için RegEx kullanacağız. RegEx’i verdiğimiz koşula ve kurala uygun olan desenleri metin içerisinde bulmamızı sağlayan hızlı ve kullanışlı algoritma türü şeklinde basitçe tanımlayabiliriz. Regex desenleri ilk bakışta çok karışık ve kafa karıştırıcı görünmekle beraber programlamada birçok yerde hayat kolaylaştırıcı ve olmazsa olmazlardandır.

    Bizim aradığımız JWT Token’lar aşağıdakine benzer şekilde;


 
  • “ey” harfleri ile başlayan,
  • Daha önce bahsettiğimiz gibi
    a.b.c
    şeklinde nokta ile ayrılmış Base64 kodlanmış üç bölümden oluşan
  • Her bölümünde içeriğinde Büyük Harf, Küçük Harf, Rakam, _, = olmak üzere en az 15 karakter barındıran ve uzunluğu en az baştaki “ey” ve iki adet nokta ile birlikte 49 karakter olan, ayrıca başlangıç ve bitişinde tek tırnak veya çift tırnak arasındaki karakterlerden oluşmuş desendir. Anlatması bile karışık ve beni yoran bu deseni dosyaların içerisinde aramak için PowerShell kullanacağız. Bunun için kullanacağımız Script aşağıdadır.

  • Powershell Script’in 27. Satırındaki Select-String fonksiyonunun –Patern parametresinde ‘[ey]{2,2}[A-Za-z0-9-_=]{15,}[.][A-Za-z0-9-_=]{15,}[.][A-Za-z0-9-_.+/=]{15,}[””]’
    RegEx formülünü kullanarak dosyaların içerisinde Token’ları bulacağız.
  • Bulduğumuz Token adaylarının gerçekten JWT Token olup olmadığını da ayrı bir Powershell Function ile sınayacağız. İlgili Function Find-Token.ps1 isimli scriptin 18. Satırında import edilip 33. Satırda da kullanılmaktadır. IsJwtToken isimli Function da aşağıdadır.

  • 1. maddede bahsettiğim JWT Token yapısına uygun olarak nokta olan yerlerden fonksiyonun 20. satırında parçalayıp, parçaların sayısının üç adet olduğunu doğrulayacağım.
  • Sınamayı geçen ilk parça olan Header bölümünün Base64 (*4) deseninde olduğunu ‘^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$’ 25. Satırda RegEx ile doğrulayacağım.
  • Header bölümü kontrolü başarılı şekilde geçerse 28. satırda Base64 olarak Decode ettikten sonra 30. Satırda Header kısmında “JWT” olup olmadığına bakacağım.
  • Başarılı olursa 34. Satırda ikinci parça olan Paylod bölümünün de Base64 deseninde olduğunu ‘^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$’ RegEx ile doğrulayıp, başarılı ise 36. Satırda Base64 olarak Decode edeceğim.
  • Decode ettiğim Payload kısmında “iss:” (Issuer) bizim aradığımız üretici (varsayılan olarak “auth.domain.com”) olup olmadığına bakacağım.
  • Son olarak tüm kontrolleri geçen Token’ı Json’dan Powershell Object’e 43. Satırda çevirerek sonucu geri göndereceğim.
  • Bu iki scripti kullanarak FindTokenConfig.txt dosyasında tanımlanış klasörlerin içindeki dosyalarda Token aradık ve bulduğumuz Tokenları TokenConfig.txt dosyasına yazdık ve FixTokenConfig.txt dosyasında olan ekstra Token bilgilerini de bulduğumuz dosyaya ekledik.

Bu bölümü de uzamaması için burada kesiyorum. Makalenin sonraki bölümünde de bulduğumuz ve TokenConfig.txt içerisine kaydettiğimiz Token’lardan değişmesi gerekenleri tespit ederek değiştirecek otomasyonu inceleyeceğiz. Ayrıca bir sonraki bölümde tüm dosyaları içeren Github Repository (*5) linkini de paylaşacağım. İlginizi çektiyse üçüncü bölümde görüşmek üzere.

Referanslar

  1. JWT (JSON Web Token): https://tr.wikipedia.org/wiki/JSON_Web_Token
  2. PowerShell: https://www.mshowto.org/powershell-nedir.html, https://www.mshowto.org/windows-powershell-nedir-ne-amacla-kullanilir-komutlar-nelerdir.html, https://docs.microsoft.com/tr-tr/powershell/
  3. RegEx (Regular expression): https://en.wikipedia.org/wiki/Regular_expression
  4. Base64: https://medium.com/@gokhansengun/base64-encoding-nedir-ve-nerelerde-kullan%C4%B1l%C4%B1r-d82f5307ea6d
  5. Github: https://www.mshowto.org/github-nedir-uyelik-nasil-olusturulur.html
  6. www.mshowto.org

TAGs: , JWT Token, , , Powershell, , , JSON, ,

Yorum Yap

Yazar Hakkında

Bora Tercan 1974 yılında Ankara’da doğdu. 20 seneden fazla bilişim sektöründe profesyonel iş deneyimi içerisinde; Marka bağımsız Sunucu, Yazılım, Firewall, Router, Veritabanı, Kablosuz Ağ, İnternet, Lan ve Wan vs. her türlü bilişim alt yapısının kurgulanması, projelendirilmesi, sorunsuz çalıştırılmasının sağlanması, merkezi olarak takibi, yönetilmesi ve sorunların tespit edilerek düzeltilmesi/düzelttirilmesi. Bilişim satın alma süreçlerinin takibi ve organizasyonun yapılması, Bilişim personelinin yönetilmesi, bilişim firmalarıyla işbirliği kurarak en iyi çözüme ilk elden ulaşılmasını sağlaması, iş analizi ve proje yönetimi gibi konularda 15 seneden fazlası Turizmde olmak üzere bilişim profesyoneli olarak sektör tecrübesi bulunmaktadır. Kariyerini bulut bilişim konusunda önemli projeleri olan Turizm Yazılımları geliştiren bir firmada Bilgi İşlem Yöneticisi olarak devam ettiriyor. Sahip olduğu sertifikalar; MCP MCSE MCSA MCDBA’dir.

Yorum Yap