> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# JWT Validasyonu

> 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.

<img src="https://mintcdn.com/apinizer/uEpU4gYmDePkcYS7/images/tutorials/j1.jpg?fit=max&auto=format&n=uEpU4gYmDePkcYS7&q=85&s=7f41bc5f7722c822c66e37866ae53bd8" alt="JOSE Validation İş Akışı" width="1000" data-path="images/tutorials/j1.jpg" />

## 1) API Proxy'nin Oluşturulması

Bu senaryoda Swagger Petstore([https://petstore.swagger.io](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.

<img src="https://mintcdn.com/apinizer/uEpU4gYmDePkcYS7/images/tutorials/j2.png?fit=max&auto=format&n=uEpU4gYmDePkcYS7&q=85&s=c2515a49a6ec7eb1c907f9ac65f5b497" alt="API Proxies Menüsü" width="200" data-path="images/tutorials/j2.png" />

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 **Api Proxy** oluşturulmaya başlanır.

<img src="https://mintcdn.com/apinizer/uEpU4gYmDePkcYS7/images/tutorials/j3.png?fit=max&auto=format&n=uEpU4gYmDePkcYS7&q=85&s=2292b8565f1660b33aa26b4962ea0369" alt="Create Butonu" width="600" data-path="images/tutorials/j3.png" />

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.

<img src="https://mintcdn.com/apinizer/ocsi_kVjLluGlu4Z/images/tutorials/swagger.png?fit=max&auto=format&n=ocsi_kVjLluGlu4Z&q=85&s=13223791b611fc908487605c87b11809" alt="Senaryo Diyagramı" width="800" data-path="images/tutorials/swagger.png" />

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.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/5.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=f80753f98c584f4cce3fba94bbd560f8" alt="URL Girme Ekranı" width="1000" data-path="images/tutorials/5.png" />

Parse işlemi yapıldıktan sonra ise aşağıdaki görselde yer alan ekran gelmektedir.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/6.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=f0d03cbb6b75f205c83dde00d89fd4ff" alt="Parse Sonrası Ekran" width="1000" data-path="images/tutorials/6.png" />

Bu ekran üzerinden API Proxy'ye ait ayarlar yapılabilmektedir. Bu ayarlar hakkında detaylı bilgi almak için [API Proxy Oluşturma](/tr/develop/api-proxy-olusturma/api-proxy-olusturma) dokümanını ziyaret edebilirsiniz.

Senaryomuzda kullanılacak olan Api Proxy'nin ayarları aşağıdaki gibidir.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/7.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=2b7c71a2c23200412075cf9cae529cb1" alt="API Proxy Ayarları" width="1000" data-path="images/tutorials/7.png" />

Kaydetme işleminden sonra ise açılan sayfada **Develop** sekmesine tıklanır.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/8.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=ef6d3204d3ec710410c74b581127f00e" alt="Develop Sekmesi" width="1000" data-path="images/tutorials/8.png" />

Burada **REST API'ye** ait **endpoint'ler** listelenmektedir.

**All** ifadesiyle **tüm metodlara** veya **tek bir** **metoda** **JOSE Validation** poliçesi eklenebilir.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/9.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=54949ce4e78b7455255bb7517afbbfb7" alt="Endpoint'ler Listesi" width="1000" data-path="images/tutorials/9.png" />

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.

<img src="https://mintcdn.com/apinizer/3JKt9YDmMqfHHisB/images/tutorials/10.png?fit=max&auto=format&n=3JKt9YDmMqfHHisB&q=85&s=06c40cef5b82e4fed13101042d07a5f1" alt="JSON Web Keypair Sets Menüsü" width="200" data-path="images/tutorials/10.png" />

Açılan ekranda sağ üst köşede yer alan dikdörtgen içerisine alınmış **Create** butonuna tıklanır.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/11.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=ceac2be380908d8211147a7c944477a3" alt="Create Butonu" width="600" data-path="images/tutorials/11.png" />

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.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/12.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=8719640ab9f642660fcbf863f70c5231" alt="Generate JWK Ekranı" width="1000" data-path="images/tutorials/12.png" />

Generate butonu kullanılması sonucu JWK oluşturulmaktadır. Oluşan Public Key doğrulama işlemlerinde kullanılmaya hazırdır.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/13.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=ddaa36e005a0cfaa6b6cea210dec4fdb" alt="JWK Oluşturuldu" width="1000" data-path="images/tutorials/13.png" />

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.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/14.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=2d3320a9025bcc66ed1c44cfbf59e838" alt="Keycloak Public Key" width="1000" data-path="images/tutorials/14.png" />

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/15.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=cf2b21af31f30a8014f83e9da52063dc" alt="Keycloak Public Key Detay" width="1000" data-path="images/tutorials/15.png" />

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/](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.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/16.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=2463d944b5f385f0c23b00f318a84263" alt="JWK Paste Ekranı" width="1000" data-path="images/tutorials/16.png" />

## 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.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/17.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=5891a6f715ba7f560282b9ec2a5206c7" alt="JOSE Validation Poliçesi Seçimi" width="1000" data-path="images/tutorials/17.png" />

Seçilen

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/18.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=5949d4326abe7b518721bdffc7a7eacd" alt="JOSE Validation Ayarları" width="1000" data-path="images/tutorials/18.png" />

Bu ekran üzerinde yer alan ifadeler tek tek incelenmek istenirse [JWKS Yapılandırması](/tr/admin/secrets-management/jwks-yapilandirma) 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.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/19.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=2f1cbba94477cd01673dc0bc023508fe" alt="JOSE Validation Ayarları Detay" width="1000" data-path="images/tutorials/19.png" />

## 4) API Proxy'nin Test Edilmesi

**Swagger Petstore** isimli proxy seçilir.

**Develop** sekmesi altında yer alan **/pet/findByStatus** isimli endpoint seçilir.

**Test Endpoint** ifadesine tıklanarak bu endpoint test edilir.

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.

<img src="https://mintcdn.com/apinizer/6d3coyPLAezC6iKa/images/tutorials/20.png?fit=max&auto=format&n=6d3coyPLAezC6iKa&q=85&s=9cae84d42fbd40cd19f2d78918ef198c" alt="Test Endpoint Sonucu" width="1000" data-path="images/tutorials/20.png" />

Eğer uygun olmayan token değeri kullanılırsa hata alınacaktır.
