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.

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

Add Plugin to Route

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.

Edit Request Transformer

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.

Create consumer

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.

consumer created

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.

Add basic auth plugin

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.

Create Consumer on Konga

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.

Add credentials to consumer

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.

--

--