REST API'ye Security Manager Provider Aracılığıyla OAuth2 Authentication Poliçesinin Uygulanması
Bu senaryoda Swagger PetStore isimli REST mimaride oluşturulmuş bir API'ye, OAuth2 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 OAuth2 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.
API Proxy'nin Oluşturulması
Swagger Petstore isimli REST API'ye https://petstore.swagger.io/ 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ş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.
- 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.
- Bu ayarlamalar yapıldıktan sonra API Proxy kaydedilir.
Kaydetme işleminden sonra ise açılan sayfada Develop sekmesine tıklanır.
Burada REST API'ye ait endpoint'ler listelenmektedir.
- Bu endpointlerin üstünde yer alan All ifadesiyle eklenecek olan poliçeler tüm endpointlere uygulanabilmektedir.
- Oluşturulan API Proxy deploy edilir. Bunun için yukarıda orta kısımda yer alan Deploy butonuna tıklanır.
- Sonraki adımda Credentials eklenerek oluşturulan API Proxy'ye hangi kullanıcıların erişim sağlayacağı belirtilir.
Credentials Oluşturulması
Eklenecek Credentials'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.
Açılan ekranda sağ üst köşede yer alan dikdörtgen içerisine alınmış Create butonuna tıklanır.
Burada gerekli olan alanlar daha önceden belirtilen şekilde doldurulur ve Save and Deploy butonuna tıklayarak oluşturulan credential kaydedilir.
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.
Açılan ekran üzerinden API Proxy ACL sekmesine tıklanır, bu sekme içerisinde yer alan ve görsel üzerinde kırmızı dikdörtgen içerisinde belirtilen butona tıklanır.
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.
Daha önceden boş bir şekilde görünen listede artık bir adet API Proxy bulunmaktadır.
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 OAuth2 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 OAuth2 Authentication poliçesi seçilir.
Bu ekran üzerinde yer alan ifadeler tek tek incelenirse,
- Grant Type alanı ile kullanılacak token servisinin kullanıcı bilgilerinin nasıl doğrulanacağı belirtilir eğer Client Credentials ifadesi seçilirse (Identity/Role/Group) Service kullanılamaz.
- Show API Key alanı ile oluşturulan proxy'ye ait API proxy key değerleri gözükmektedir.
- Delete Previous Token alanı ile daha önceden bulunan token geçersiz hale getirir.
- Token Never Expires alanı ile oluşturulan token'a bir zaman değeri atanmaz ve istenildiği kadar kullanılabilir bu seçenek seçilmez ise hemen altında aşağıdaki görselde yer alan bir menü oluşur.
- Token Expires In alanı ile token'ın ne kadar bir süre geçerli olacağı belirtilir, bu belirtme işlemi açılır menü içerisinde yer alan zaman ifadeleri ile ayarlanabilir.
- Refresh Token Allowed alanı ile oluşturulan token'ın yenilenme özelliği aktifleştirilir.
- Bu seçenek seçildiği takdirde de kaç kez yenilenebileceğine dair ayarlamanın yapılacağı alan gelmektedir ve bu alana ait görsel aşağıda yer almaktadır.
- Refresh Token Count token'ın kaç kez yenilenebilir olacağını belirtir.
- Refresh Token Expires In alanı ise yenilenen token'ın ne kadarlık bir yaşam süresine sahip olacağını belirtir.
- Allow URL Parameters alanı ile token üretimi için istek gönderildiğinde gidecek olan bilgilerin sadece mesaj gövdesinde gönderilmesine izin verilir.
- Eğer bu bilgilerin "URL Parametresi" olarak gönderilmesi istenirse bu seçenek seçilmelidir ancak bu durum bir güvenlik riski oluşturacağı için önerilmez.
- Clear Authentication Information alanı ile backend API'ye gidecek mesaj içerisinde herhangi bir kimlik doğrulama bilgisi varsa bu bilgiler silinir ve backend API'ye gönderilmez.
- Add Client Info to Header alanı ile kimlik doğrulama başarılı bir şekilde gerçekleştiğinde, yetkilendirilmiş olan kullanıcı adını header'ın içine koyarak backend API'ye gönderir.
- Bu seçenek işaretlendiğinde ise hemen altında içerisinde X-Authenticated-UserId yazan bir input alanı oluşacaktır. Bu alan header bilgisinin varsayılan adıdır.
Bu senaryo içerisinde kullanılacak olan ayarlamalar aşağıdaki görselde yer aldığı üzeredir bu değişiklikleri yaptıktan sonra sağ üst köşede yer alan Save butonuna tıklanır.
Authentication için Token Oluşturulması
Daha sonra ise OAuth2 poliçesi içerisinde yer alan Show API Key seçeneğinden ilgili proxy'ye ait Public Key bilgisi alınır.
Daha sonra ise Test menüsü altında yer alan Test Console menüsüne gelinir.
Bu ekrana geldikten sonra ise Collection sekmesi altında yer alan New butonuna tıklanır ve yeni bir Collection oluşturulur.
Name alanına OAuth2 yazılır ve Save butonuna tıklanır.
Bu ekran üzerinde yer alan ifadeler tek tek incelenirse;
- Method alanından method tipi seçilir.
- URL alanına token'ın alınacağı adres yazılır.
- Mesajın içeriği body kısmında yer alacağı için aşağıda yer alan sekmeden body ifadesi seçilir.
- Buraya token elde edebilmek için gerekli olan değerler yazılır ve Send butonuna tıklanır.
Yanıt içerisinde yer alan access_token bilgisi proxy'de kullanılacak olan OAuth2 Authentication için oluşturulmuştur.
Bu token kopyalanır.
Tekrardan API proxy'inin olduğu sayfaya geçiş yapılır.
API Proxy'nin Test Edilmesi
Swagger Petstore isimli proxy seçilir.
Develop sekmesi altında yer alan
URL' de istenilen petId değeri 2 olarak girilir, Send butonuna basıldığında dönen yanıtın bir hata mesajı olduğu ve bu hatanın da uygulanmış olan OAuth2 Authentication ile alakalı olduğu görülmektedir.
Çünkü header'ın içerisine hiçbir şekilde bir authentication bilgisi yerleştirilmemiştir.
Bu sefer header içerisine Authorization header yerleştirilir ve elde edilen token'ın başına Bearer ifadesi eklenerek kullanımı gerçekleştirilir.
Send butonuna tıklandığında alınan cevap Response alanı içerisinde yer almaktadır.