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

# Rest api security manager plain text auth

# REST API'ye Security Manager Provider Aracılığıyla Plain-Text Authentication Poliçesinin Uygulanması

Bu senaryoda **Swagger PetStore** isimli **REST** mimaride oluşturulmuş bir **API'ye**, **Plain-Text Authentication** poliçesinin uygulanması test edilecektir.

Aşağıdaki grafikte yer alan numaralandırmalar işlemlerin **yapılış sırasına aittir.**

* **Apinizer** içerisinde yer alan **Security Manager, API Client'tan Plain-Text türünde authentication** bilgisini ister. Bu authentication doğru ise iki numaralı alana geçiş yapılır.
* **Apinizer, Backend API'ye istekte** bulunur.
* **Backend API, Apinizer'a** yanıt verir.
* **Apinizer, API Client'a** yanıt verir.

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

## API Proxy'nin Oluşturulması

<img src="https://mintcdn.com/apinizer/VUbwu9iu7Snx108F/images/tutorials/senaryo2.png?fit=max&auto=format&n=VUbwu9iu7Snx108F&q=85&s=052195ac9313eff2da0121245624677f" alt="Senaryo Diyagramı" width="200" data-path="images/tutorials/senaryo2.png" />

Swagger Petstore isimli REST API'ye [https://petstore.swagger.io/](https://petstore.swagger.io/) adresinden erişim sağlanabilmektedir.

**Development** menüsü altında yer alan **API Proxies** seçeneğine tıklanır.

<Info>
  Açılan sayfada daha önceden herhangi bir **proxy** tanımı yapılmadığı için **No records found!** yazısı yer alır.
</Info>

Sağ üst köşede yer almakta olan **Create** butonuna tıklanır ve yeni bir **proxy** oluşturulmaya başlanır.

<img src="https://mintcdn.com/apinizer/VUbwu9iu7Snx108F/images/tutorials/senaryo3.png?fit=max&auto=format&n=VUbwu9iu7Snx108F&q=85&s=938b0de54e7641fce65b865f3f5182b0" alt="Senaryo Diyagramı" width="800" data-path="images/tutorials/senaryo3.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" />

URL kısmına **erişim sağlanacak adres girilerek Parse** butonuna tıklanır.

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

Parse işlemi yapıldıktan sonra API Proxy'ye ait ayarlar yapılabilmektedir:

* **Usage** alanı ile oluşturulan API Proxy'nin kim tarafından kullanılacağı belirtilir. Burada **publisher, consumer, publisher and consumer** gibi seçenekler yer almaktadır.
* **Sharing Type** alanı ile oluşturulan API Proxy'nin paylaşım tipi belirtilir. Burada **external, internal, external and internal** gibi seçenekler yer almaktadır.
* **Addresses** sekmesi altında yer alan iki API adresinden biri veya her ikisi de seçilebilir eğer iki adres de seçilecek olursa Apinizer **Load Balance** işlemini kendisi gerçekleştirecektir.
* **Relative Path** ise oluşturulan API Proxy'nin erişime açılacak adresidir.
* **Category List** alanı da oluşturulan API Proxy'nin kategorilendirilmesine olanak sağlar.

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

Bu ayarlamalar yapıldıktan sonra API Proxy kaydedilir.

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

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

<Info>
  Bu endpointlerin üstünde yer alan **All** ifadesiyle eklenecek olan poliçeler **tüm endpointlere** uygulanabilmektedir.
</Info>

Oluşturulan API Proxy deploy edilir. Bunun için yukarıda orta kısımda yer alan **Deploy** butonuna tıklanır.

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

## Credentials Oluşturulması

Eklenecek **Credential'a** ait bilgiler **username = apinizer**, **password = 123123aA** olacak şekildedir.

Bunun için **Identity Management** menüsüne gelinir.

Burada ise **Credential Management** menüsü altında yer alan **Credentials** menüsüne tıklanır.

<img src="https://mintcdn.com/apinizer/VUbwu9iu7Snx108F/images/tutorials/senaryo9.png?fit=max&auto=format&n=VUbwu9iu7Snx108F&q=85&s=b6251e96ba25024507bf54bb9c42088e" alt="Senaryo Diyagramı" width="200" data-path="images/tutorials/senaryo9.png" />

Açılan ekranda sağ üst köşede yer alan **Create** butonuna tıklanır.

<img src="https://mintcdn.com/apinizer/VUbwu9iu7Snx108F/images/tutorials/senaryo10.png?fit=max&auto=format&n=VUbwu9iu7Snx108F&q=85&s=7f11ddaa0164cd3fe50bb9632b47235a" alt="Senaryo Diyagramı" width="600" data-path="images/tutorials/senaryo10.png" />

Burada gerekli olan alanlar daha önceden belirtilen bilgilerle doldurulur ve **Save and Deploy** butonuna tıklayarak oluşturulan **credential** kaydedilir.

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

Bu **credential öğesinin** erişim sağlayacağı proxy'nin seçilmesi gerekmektedir. Oluşturulan **credential'ın** üzerine gelip yanda yer alan menüden **Edit** seçeneğine tıklanır.

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

Açılan ekran üzerinden **API Proxy ACL** sekmesine tıklanır, bu sekme içerisinde yer alan butona tıklanır.

<img src="https://mintcdn.com/apinizer/bxDpmriTStVknLzL/images/tutorials/api-proxy-acl.png?fit=max&auto=format&n=bxDpmriTStVknLzL&q=85&s=4382f031671c9a1db129f0cbec08544f" alt="Senaryo Diyagramı" width="800" data-path="images/tutorials/api-proxy-acl.png" />

Açılan sayfada şu an üzerinde çalışılan projede bulunan **API Proxy'ler** listelenmektedir. **Swagger Petstore** isimli **proxy** seçilir.

**Add** butonuna tıklayarak oluşturulan **Credential** öğesinin bu **proxy'ye erişimi olacağı belirtilir.**

<img src="https://mintcdn.com/apinizer/VUbwu9iu7Snx108F/images/tutorials/senaryo14.png?fit=max&auto=format&n=VUbwu9iu7Snx108F&q=85&s=86bfab93f7d0e4dfe924a20118d31bce" alt="Senaryo Diyagramı" width="600" data-path="images/tutorials/senaryo14.png" />

Sağ üst köşede yer alan **Save and Deploy** butonuna tıklanır ve yapılan işlem kaydedilir.

## Authentication Poliçesinin Eklenmesi

Artık **Plain-Text Authentication** poliçesi eklenebilir 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 **Plain-Text Authentication** poliçesi seçilir.

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

Bu ekran üzerinde yer alan alanlar:

* **Identity/Role/Group Service** alanında seçilecek olan değer **Security Manager** değeridir. Çünkü credentials kontrolü **Security Manager** tarafından gerçekleştirilecektir.
* **Variable for username** ve **variable for password** ifadeleri ile de kullanıcı adı ve parola bilgisinin hangi değişken ile alınacağı seçilir. Bu senaryoda bu değerler **header** içerisinden alınacaktır.

<Warning>
  **Clear Authentication Information** seçeneği seçilirse gelen mesaj içerisinde authentication bilgisi silinir. Bu ayarın aktifleştirilmesi özel bir durum olmadığı sürece her zaman tavsiye edilmektedir.
</Warning>

* **Add Client Info To Header** seçeneği backend API'ye gidecek Header içerisinde istemciye ait bilgilerin bulunup bulunmayacağını belirtir.
* Bu seçenek aktif duruma gelirse **Authenticated User Header Name** isminde başka bir parametre ortaya çıkmaktadır.
* Burada yer alan **X-Authenticated-UserId** ifadesi ise backend API'ye gidecek olan istemci bilgisinin hangi başlık ismi ile gideceğini belirtmektedir.

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

<Info>
  Poliçe kaydolduğu zaman ilgili ikon görülmektedir.
</Info>

Yapılan işlemin geçerli olması için proxy'nin **Deploy** olması gerekmektedir.

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

## API Proxy'nin Test Edilmesi

**"/pet/{petId}"** endpoint'i seçildikten sonra, **Test Endpoint** butonuna tıklanır.

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

URL'de istenilen **petId** değeri **"1"** olarak girilir, **Send** butonuna basıldığında dönen yanıtın bir hata mesajı olduğu görülmektedir.

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

<Warning>
  Bu hatanın uygulanmış olan **Plain-Text Authentication** ile alakalı olduğu görülmektedir. Çünkü **header'ın** içerisine hiçbir şekilde bir **authentication** bilgisi yerleştirilmemiştir.
</Warning>

Bu sefer header içerisine **username** ve **password** ifadeleri girilip test yeniden gerçekleştirilir.

**Backend API'ye** gönderilecek olan **headers** içerisinde **username = apinizer**, **password = 123123aA** değerleri girilir.

**Send** butonuna tıklandığında başarılı cevap alınır.

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