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

# SOAP Web Servise Security Manager Provider Aracılığıyla Plain-Text Authentication Poliçesinin Uygulanması

> Calculator SOAP web servisine Security Manager provider aracılığıyla Plain-Text Authentication poliçesinin nasıl uygulanacağını açıklar. API Proxy oluşturulmasından credential tanımlamasına, politikasının 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. Bu **authentication** bilgisi 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" />

Calculator isimli web servise [http://www.dneonline.com/calculator.asmx?WSDL](http://www.dneonline.com/calculator.asmx?WSDL) adresinden erişim sağlanabilmektedir.

İ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ş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" />

Eklenecek API proxy bir SOAP web servis olduğu için **WSDL menüsünden** **Enter URL** ifadesine tıklanarak kullanılacak olan web servisin adresinin girileceği ekrana geçiş yapılır.

<img src="https://mintcdn.com/apinizer/aOIH-4QxMAw_nc-p/images/tutorials/wsdl.png?fit=max&auto=format&n=aOIH-4QxMAw_nc-p&q=85&s=0e13bfeaa27bfde0cb3a51cbdc18819b" alt="Senaryo Diyagramı" width="800" data-path="images/tutorials/wsdl.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/CjY5_esa4pwiobby/images/tutorials/soap2.png?fit=max&auto=format&n=CjY5_esa4pwiobby&q=85&s=661edf30bca678242d74fba5022f8f7e" alt="Senaryo Diyagramı" width="800" data-path="images/tutorials/soap2.png" />

Çözümlemeyi yaptıktan sonra ise aşağıdaki görselde yer alan ekran karşımıza çıkmaktadır. Bu ekran üzerinden API Proxy'ye ait ayarlar yapabilmektedir.

* **Usage** alanı ile oluşturmuş olunan API Proxy'nin kim tarafından kullanacağı belirtilir. Burada **publisher, consumer, publisher and consumer** gibi seçenekler yer almaktadır.
* **Protocol Transformation** sekmesi altında yer alan iki farklı seçenek bulunmaktadır;
  * **Pass-Through SOAP** web servis üzerinde hiçbir transform işlemi yapmadan SOAP web servis haliyle kullanılmasına olanak sağlar.
  * **REST to SOAP to REST** ise bu SOAP web servisin REST mimari içerecek bir yapıda kullanılmasına olanak sağlar.
* **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/CjY5_esa4pwiobby/images/tutorials/soap3.png?fit=max&auto=format&n=CjY5_esa4pwiobby&q=85&s=5a7d116ebd6d8e1168100940e3dedb12" alt="Senaryo Diyagramı" width="800" data-path="images/tutorials/soap3.png" />

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

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

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

Burada web servise ait olan **metotlar** görülmektedir.

* Bu metotların üstünde yer alan **All** ifadesiyle eklenecek olan poliçeler **tüm metotlara** uygulanabilmektedir.
* 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/CjY5_esa4pwiobby/images/tutorials/soap5.png?fit=max&auto=format&n=CjY5_esa4pwiobby&q=85&s=b86df05ffea4596397fa8cde8f37789e" alt="Senaryo Diyagramı" width="800" data-path="images/tutorials/soap5.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. **Calculator** 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 **Calculator** 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.
* **Clear Authentication Information** seçeneği seçilirse gelen mesaj içerisinde authentication bilgisi silinir.
* **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" />

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

**Add** metodunu seçtikten sonra **Test Method** 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" />

Body içerisinde istenilen değerler yazıldıktan sonra **Send** butonuna tıklanır ve **backend API'ye** istekte bulunulur.

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

Aşağıdaki görselde de görüldüğü üzere **backend API'ye** hiçbir **authentication** bilgisi gönderilmediği için yanıt olarak dikdörtgen içerisinde yer alan hata mesajı alınır.

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

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ıkladığında başarılı cevap alınır.

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