> ## 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'ye LDAP Provider Aracılığıyla Plain-Text Authentication Poliçesinin Uygulanması

> Swagger Petstore REST API'sine LDAP/Active Directory provider aracılığıyla Plain-Text Authentication poliçesinin nasıl uygulanacağını açıklar. LDAP bağlantısının kurulmasından kimlik doğrulama ayarlarının yapılmasına, poliçesinin eklenmesinden test edilmesine kadar tüm adımları içerir.

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.
* **Authentication** bilgileri LDAP üzerinden kontrol edilmek üzere gönderilir.
* **LDAP'tan** Apinizer'a authentication bilgileriyle ilgili cevap döner. Bu authentication doğru ise akış devam eder.
* **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/onnph0cZV1IIZ7ZM/images/tutorials/ldap1.png?fit=max&auto=format&n=onnph0cZV1IIZ7ZM&q=85&s=89209186f4bde322748286e0cbad9b90" alt="Senaryo Diyagramı" width="800" data-path="images/tutorials/ldap1.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şturmaya 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 almakta olan **All** ifadesiyle eklenecek 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" />

## LDAP/Active Directory Bağlantısının Gerçekleştirilmesi

**Connection Management** menüsü altında yer alan **LDAP/Active Directory** menüsüne tıklanır.

<Info>
  Daha önceden herhangi bir **LDAP/Active Directory** tanımı gerçekleştirilmediği için bu sayfada **There is no LDAP/Active Directory** yazısı yer almaktadır.
</Info>

**LDAP/Active Directory** bağlantısını oluşturmak için sağ üst köşede yer alan **Create** butonuna tıklanır.

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

Bu ekran üzerinde yer alan alanlar:

* **Name** alanı ile oluşturulan bağlantının ismi ifade edilir.
* **Server Address** alanı ile bağlanılacak olan **LDAP/Active Directory** sunucusunun adresi yazılır.
* **Description** ifadesi ile oluşturulan bağlantıya açıklama eklenebilir.
* **Certificate Status** alanı ile LDAP bağlantısı için gerekli olan sertifika seçilir veya yeni bir sertifika oluşturulur.
* **Username** alanı ile bağlantı esnasında kullanılacak olan kullanıcı adı bilgisi, **Password** alanı ile de bağlantı esnasında kullanılacak olan parola girilir.
* **Base DN** alanı ile de bağlantısı sağlanacak olan LDAP'ın temel dn adresi belirtilir.

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

**Test Connection** butonuna tıklanarak test işlemi gerçekleştirilir, **Save and Deploy** butonuna tıklanarak da işlemler kaydedilir.

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

Kayıt işlemi gerçekleştikten sonra ise aşağıdaki görselde yer aldığı gibi oluşturulan bağlantı görüntülenir.

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

## Authentication Poliçesinin Oluşturulması

API proxy'lerin listelendiği sayfaya gidilir ve buradan **Swagger Petstore** isimli proxy seçilir.

**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 **LDAP** değeridir. Çünkü authentication kontrolü **LDAP/Active Directory** içerisinde yer alan yapı tarafından gerçekleştirilecektir.
* LDAP değeri seçildiğinde daha önceden oluşturulan LDAP bağlantısı seçilmelidir.
* **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/dOu0rEEHFhAKVsXF/images/tutorials/ldap6.png?fit=max&auto=format&n=dOu0rEEHFhAKVsXF&q=85&s=9339e886ff84bdaf8333f1439dfb6438" alt="Senaryo Diyagramı" width="800" data-path="images/tutorials/ldap6.png" />

Yapılan değişiklikler sağ üst köşede yer alan **Save** butonuna tıklanarak kaydedilir.

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

Yapılan işlemin geçerli olması için proxy'nin **Redeploy** olması gerekmektedir. Şimdi proxy'nin içerisinde yer alan metotların test işlemi gerçekleştirilebilir.

<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 **"2"** 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/dOu0rEEHFhAKVsXF/images/tutorials/ldap7.png?fit=max&auto=format&n=dOu0rEEHFhAKVsXF&q=85&s=ebcb2ec44b6678a71c28c8763f556f81" alt="Senaryo Diyagramı" width="800" data-path="images/tutorials/ldap7.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>

Header içerisine **username** ve **password** ifadeleri girilip testi yeniden gerçekleştirilir.

**Backend API'ye** gönderilecek olan **headers** içerisinde **username = user.9** ve **password = Apinizer.1** değerleri girilir.

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

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