JWT Validasyonu
Bu senaryoda Swagger PetStore isimli REST mimaride oluşturulmuş bir API'ye, gönderilen JWT'nin JOSE Validation poliçesi ile kontrol edilmesi anlatılacaktır.
Aşağıdaki görselde bir isteğe uygulanacak olan JOSE Validation iş akışı yer almaktadır.
1) API Proxy'nin Oluşturulması
Bu senaryoda Swagger Petstore(https://petstore.swagger.io) isimli REST API kullanılacaktır.
İlk olarak bu adresin API Proxy olarak tanımlanması gereklidir.
Bunun için Development menüsü altında yer alan API Proxies seçeneğine tıklanır.
Açılan sayfada daha önceden herhangi bir proxy tanımı yapılmadığı için No records found! yazısı yer alır.
Burada sağ üst köşede yer almakta olan Create butonuna tıklanır ve yeni bir Proxy oluşturulmaya başlanır.
Bu kısımda oluşturulacak olan API Proxy'nin hangi tipte olduğunun seçilmesi gerekmektedir.
Bu senaryoda kullanılacak olan API'nin türü Swagger 2.X olacağı için bu tür seçilir.
Enter URL ifadesine tıklanarak kullanılacak olan API'nin adresinin girileceği ekrana geçiş yapılır.
Aşağıdaki görselde de görüldüğü üzere URL kısmına erişim sağlanacak adres girilerek Parse butonuna tıklanır.
Parse işlemi yapıldıktan sonra ise aşağıdaki görselde yer alan ekran gelmektedir.
Bu ekran üzerinden API Proxy'ye ait ayarlar yapılabilmektedir. Bu ayarlar hakkında detaylı bilgi almak için API Proxy Oluşturma dokümanını ziyaret edebilirsiniz.
Senaryomuzda kullanılacak olan Api Proxy'nin ayarları aşağıdaki gibidir.
Kaydetme işleminden sonra ise açılan sayfada Develop sekmesine tıklanır.
Burada REST API'ye ait endpoint'ler listelenmektedir.
All ifadesiyle tüm metodlara veya tek bir metoda JOSE Validation poliçesi eklenebilir.
JOSE Validationda imza doğrulamasını yapabilmek için JSON Web Keypair Sets eklenmesi gerekmektedir.
2) JSON Web Keypair Sets
JSON Web Keypair Sets eklemek için sol menüden Secret Manager altından JSON Web Keypair Sets menüsüne girilir.
Açılan ekranda sağ üst köşede yer alan dikdörtgen içerisine alınmış Create butonuna tıklanır.
Bu doküman içerisinde JSON Web Keypair Sets'in Apinizer ile veya Keycloak(3.party bir yazılım) ile üretilmesi üzerinde durulacaktır.
2.1) Apinizer Üzerinden JWK Üretilmesi:
Bu senaryoda Name alanı testjwk senaryo olarak kullanılacaktır.
Generate JWK seçeneği ile ve istenen algoritma kullanılarak JWK oluşturulur.
Generate butonu kullanılması sonucu JWK oluşturulmaktadır. Oluşan Public Key doğrulama işlemlerinde kullanılmaya hazırdır.
Son adım olarak Save And Deploy butonuna tıklayarak kaydedilir.
2.2) Keycloak Üzerinden JWK Üretilmesi :
Keycloak üzerinden Realm Settings > Keys menüsünden Public key alanına basılarak Public key alınır.
Public key, 3.party bir araçla JWK'ya dönüştürülmelidir. Bunun için şu adres kullanılabilir: https://russelldavies.github.io/jwk-creator/
JWK'a dönüştürülen public keyi Apinizer'a Kaydetmek için;
- Sol menüden Secret Manager menüsünün altından JSON Web Keypair Sets sayfasına gidilir.
- Bu senaryoda Name alanı testjwk senaryo olarak kullanılacaktır.
- Paste the content of the JWT seçeneği seçilir ve ilgili alana JWK girilir.
- Key id alanına ise Keycloak 'da bulunan Kid alanındaki değer girilir ve ardına Save and Deploy butonuna tıklayarak kaydedilir.
3) Authentication Poliçesinin Eklenmesi
Artık JOSE Validation poliçesi kullanılabilir duruma gelmiştir.
API Proxy'lerin listelendiği sayfaya gidilir ve buradan Swagger Petstore isimli proxy seçilir.
Daha sonra ise Develop sekmesine gelinir, Add Policy butonuna tıklanır.
Açılan sayfada JOSE Validation poliçesi seçilir.
Seçilen
Bu ekran üzerinde yer alan ifadeler tek tek incelenmek istenirse JSON Web Keypair Sets sayfasını ziyaret edebilirsiniz.
Bu senaryo içerisinde kullanılacak olan ayarlamalar aşağıdaki görselde yer aldığı gibidir bu değişiklikleri yaptıktan sonra sağ üst köşede yer alan Save butonuna tıklanır.
4) API Proxy'nin Test Edilmesi
Swagger Petstore isimli proxy seçilir.
Develop sekmesi altında yer alan /pet/findByStatus
URL' de istenilen status değeri pending olarak girilir, Send butonuna basıldığında dönen yanıtın bir hata mesajı olduğu görülür.
Header içerisine Authorization header yerleştirilir ve keycloak'tan veya Apinizer'dan üretilmiş token bilgisi burada kullanılır.
Send butonuna tıkladığında alınan cevap görsel üzerinde aşağıda yer alan dikdörtgen içerisindeki ifadedir.
Eğer uygun olmayan token değeri kullanılırsa hata alınacaktır.