Kong Api Gateway & Yetkilendirme (Basic — Authentication)
Api Gateway çözümleri temel senaryoda microservis mimarisinde servisler arası iletişim sağlamak için kullanılsa da bunun yanında dış kaynaklı servislerin yönetimini sağlamak için de çoğu firma ve kurum tarafından kullanılıyor. Ip bazlı kısıtlama yapılmış dışardan alınan servisleri kendi iç ağımızdaki kullanıcılara açmak ve dağıtmak, servislerin güvenliğini sağlamak, gelen istekleri yönetmek, takip etmek ve kendi kullanıcılarımıza özel yetkilendirme yapmak gibi önemli ihtiyaçlarımızı da karşılamak için Api Gateway ürünlerine ihtiyaç duyuyoruz.
Yetkilendirilmiş bir Api’nin önce mevcut yetkilendirmeyi kaldırmak daha sonra kendi oluşturduğum kullanıcılar için yetkilendirme tanımlamak için gerekli adımları CURL komutları ile ve Konga arayüzü ile uygulayacağımız adımları sırasıyla göstermeye çalıştım.
1.Request Transformer Plugin ile Yetkilendirmeyi Kaldırmak
Yetkilendirmeyi kaldırmamız için gerekli olan Request Trasformer Plugini
Kong Request Transformer Plugin
Pluginin dökümantasyonunu ayrıntılı örnekler için inceleyebilirsiniz. Ben burda sadece Basic Authentication yetkilendirmesini kaldırmak için gerekli olan adımı göstereceğim.
1.1 CURL Komutları ile Plugini Eklemek
curl -X POST http://{HOST}:8001/routes/{my-route-name}/plugins \
— data “name=request-transformer”
(Eklediğimiz plugin adının tanımlanması)
— data “config.add.headers=my-auth-value” \
(Plugin içinde yapılan configurasyon)
Bu , belirttiğim route’a request transformer plugini ekle ve bu route için request header alanına benim verdiğim değeri ekleyerek istek yapılmasını sağlıyor.
Örneğin Basic Authentication tanımlı bir servisimiz var aslında request gönderilirken Header alanında;
Authorization :Basic bXktdXNlcjpteS1wYXNzd29yZA==
parametreleri eklenmiş oluyor. Bu şekilde doğrulamayı yapıyoruz.
Postmanda Headers bölümünde gördüğümüz gibi.
— data “config.add.headers=Authorization: Basic bXktdXNlcjpteS1wYXNzd29yZA==”
eklediğimizde yaptığımız istek içinde header alanında kimlik doğrulamayı göndermiş olduk ve böylece servisimiz artık kullanıma açık hale geldi.
Örnek Kod Tamamı aşağıdaki şekilde çalıştırılmalı:
( Route üzerinde request transformer plugini aktifleştirmiş oluyoruz.)
Sonuç gelip gelmediğini postman ile ya da curl adresinden istek atarak test etmekte fayda var.
- 2. Konga Arayüzü ile Plugini Eklemek
Arayüzden yapmak istersek;
Eklemek istediğimiz servis ve ilgili route’u seçerek
-> Plugins -> Add Plugin -> Request Trasnformer
adımlarını takip ediyoruz.
Daha sonra Pluginlerden eklediğimiz request transformer plugini açarak alanlarını editleyeceğiz. Ben sadece Header alanına ekleme yapacağım için
add -> headers alanına :
Authorization: Basic bXktdXNlcjpteS1wYXNzd29yZA==
satırını enter tuşlayarak set ediyorum . Burada authorization özelliği
basic-auth için verilen username ve password’ün Base64 dönüştürülmüş kodu olarak set edilir. Bu kodu bilmiyorsanız oluşturmak için Encode Base 64 kullanılabilir.
kaydettiğimizde tamamlamış olduk.Artık istek basic-auth doğrulaması ile birlikte gideceği için entpoint açık olacak.
Bir sonraki adımda kendi yetkilendirmemizi ekleyebiliriz.
Kong Basic Authentication Plugin
1. CURL ile Basic-Auth Pluginini eklemek
Pluginini servis için aktif etmek aşağıdaki gibi;
curl -X POST http://{HOST}:8001/services/{SERVICE}/plugins \ — data “name=basic-auth” \ — data “config.hide_credentials=true”
Pluginini route için aktif etmek aşağıdaki gibi;
curl -X POST http://{HOST}:8001/routes/{ROUTE}/plugins \
— data “name=basic-auth” \
— data “config.hide_credentials=true”
görünecek.
Ben JsonPlaceHolder servisimin getPosts route’u için authentication ekleyeceğim. Plugini route üzerine eklemek için aşağıdaki satırları çalıştırıyorum. (Benim route ismim :’getPosts’)
Route için basic authentication yetkilendirmesi tanımlamış olduk.
Bu yetkilendirmeden geçecek kullanıcılar consumers olarak tanımlanacak.
Ve tanımladığımız kullanıcılar artık yetkilendirilmiş servis routeuna belirlediğimiz kimlik bilgileriyle giriş yapabiliyor olacaklar.
Zaten tüm arzumuz bu :)
2. Kullanıcı Oluşturma
Kendi oluşturacağınız kullanıcıyı username ve custom_id parametrelerini set ederk aşağıdaki satırı çalıştırıyoruz.
Eğer verdiğiniz değerler var olan kullanıcı ismi ve idsi ile aynı ise
”unique constraint violation” hatasını alırsınız.
Başarılıysa bize id değerini veren aşağıdaki cevabı alırız.
Kullanıcımız oluşturduk. Bu kullanıcıya kimlik bilgileri tanımlayacağız.
3.Kimlik Bilgileri Tanımlama
Bunu çalıştırdığımda başarıyla kimlik bilgileri tanımlandığında aşağıdaki cevabı alırız.
4.Kimlik Bilgilerini Kullanma
Kullanıcı şifre tanımlaması yapmak için “my-user:my-password” şeklinde yazdığımız kullanıcı şifre bilgilerini Base64 konuda çevirmemiz gerekiyor.
Base64 değerini almak için terminal ya da Base64encode kullanabiliriz.
“rabiyatest-user:rabiyatest-password” olan kimlik bilgileri :
Base64 code : InJhYml5YXRlc3QtdXNlcjpyYWJpeWF0ZXN0LXBhc3N3b3JkIg==
Aşağıdaki satırları çalıştırdıgmda http://localhost:8000/posts/ adresindeki route’a (/posts)
Böylece, rabiyatest kullanıcısına yetki tanımlamış olduk. İstek yaptığımızda artık kimlik bilgileri istiyor olacak. Sonuç :
Tarayıcıdan ve ya postmanden test edebilirseniz sağlıklı olacaktır.
Bir de bu işlemleri Konga arayüzü ile yapmayı görelim.
Konga ile Basic Authentication
Yetkilendirme yapacağımız route’u seçtikten sonra Plugins menüsünden
-> Add Plugin ->Authentication-> Basic Auth Plugini seçerek ekleyelim.
Basic Auth Plugini seçtikten sonra aşağıdaki ekran geliyor ama sadece hide credentials alanı yes olarak değiştiriyorum,diğer alanları boş bırakarak ekliyorum.Böylece servis route, kimlik bilgileri tanımlanmış kullanıcılara yetkilendirilmiş oldu.
Kullanıcı Ekleme
Consumers -> Create Consumer diyerek bir kullanıcı ekleyelim.
Burada username ve bir id ekleyeceğiz.
Kullanızımızı oluşturduktan sonra Credentials menüsünü seçerek istenen yetkilendirme tipine göre kimlik bilgileri tanımlayacağız.
Ben basic menüsüne giderek basic-auth ekleyeceğim.
Basic- Auth için bir kullanıcı adı ve şifre belirliyorum,konga bunu Base64 encode edilmiş değeriyle tutuyor olacak.
Servisim ve ya seçtiğim route adresine erişmek istediğimde artık oluşturduğum kullanıcının bilgileri ile giriş yapabilirim.
Arayüzden Json servisimin getPost routenda bunu kontrol edelim.
Eklediğimiz basic-auth plugini ve yetkilendirme yapılmış kullanıcıların listesi yukarıdaki görünüyor olacak. Oluşturduğunuz kimlik bilgilerini postman ile ya da browserdan test edebilirsiniz.
Elimden geldiği kadar detaylandırmaya çalıştım umarım faydalı olmuştur.
Bu yazıda sadece en çok kullanılan yetkilendirme türü olduğunu gördüğüm için Basic Authentication örneği gösterdim. Diğer türlerde yetkilendirme yapmak için de kong dökümantasyonunda adımları takip edebilirsiniz.
Eksik gördüğünüz ,eklemek istediğiniz ve ya merak ettiğiniz bir konu var ise yorum yapabilirseniz sevinirim. Geri bildirim faydalı olacaktır.
Kong Api Gateway ve Konga Kurulumu için yazdığım bir önceki yazı için buradan.
Bir sonraki adımda Loglama, Güvenlik ve eğer başarılı olursa soap to rest dönüştürme anlatmayı planlıyorum .Görüşmek üzere.