Siber Güvenlik

Spring Boot ve Security ile Swagger Kullanımı

Farklı takımların dahil olduğu projelerde, örneğin frontend ve backend geliştiricilerde, dokümantasyon çok önemlidir. Özellikle RESTful web servisleri oluştururken, olası üçüncü taraf tüketicilerin sayısı tahmin edilemez bir şekilde artabilir. REST API'yi daha açık ve anlaşılır hale getirmek için dokümantasyon çözümleri bulunur ve Swagger bunlardan biridir.

Necmeddin Tapan |

30.11.2023

Swagger nedir?

 

Swagger, REST API tasarlamak, oluşturmak ve geliştirmek için kullanılan bir sözleşme standardıdır. Bunun için yardımcı araçlar sunmaktadır. REST API'yi web tarayıcıları aracılığıyla kullanıcı dostu bir arayüzle göstermek için kullanılır.

 

Swagger nasıl kullanılır?

 

Peki Swagger kullanımı nasıldır? Spring Boot projelerinde Springfox'un Swagger uygulamasını kullanmak için, aşağıdaki bağımlılıklar “pom.xml”e eklenmelidir.

 

Spring Boot ve Security ile Swagger Kullanımı

 

"springfox-boot-starter" bağımlılığı, API dokümanlarını oluşturmak için kullanılır. "swagger-ui", bu belgeleri güzel bir şekilde görüntülemek için kullanılır ve ayrıca kullanıcılar ile “API endpointler” arasında tarayıcı üzerinde etkileşim sağlar.

 

pom.xml'e bağımlılıklar eklendikten sonra, aşağıda görüldüğü gibi projeye bir “Configuration” class eklenmelidir. Yapılandırmadan sorumlu olan “Docket Bean”, bu sınıfta tanımlanmalıdır.

 

Proje içinde taranmasını istediğiniz klasörler/paketler, "RequestHandlerSelectors" ile tanımlanabilir. Swagger'da sadece “Controller Class”larını ekleyebilirsiniz veya bununla beraber “Entity”lerinizi ekleyebilirsiniz.

 

Swagger Config

 

ApiInfo”nun eklenmesi isteğe bağlıdır ve REST API belgeleri hakkında başlık, açıklama ve iletişim bilgileri gibi ek bilgiler sağlar.

 

Yapılması gereken bağımlılıklar (dependency) ve Docket Bean tanımlamaları REST API dokümanlarını gösterecek “swagger-ui” için yeterli olur. API dokümanını daha okunabilir ve bilgilendirici hale getirmek için, “Controller Class”larına ve “Endpoint”lere "@Api" ve "@ApiOperation" anotasyonları eklenebilir.

 

swagger anotasyonları

 

swagger anotasyonları

 

Swagger-ui, linkte yayınlanmaya hazır durumdadır.

 

Aşağıdaki görselde Swagger tarafından desteklenen REST API dokümanının ana sayfasını görebilirsiniz. Görüldüğü gibi, “Project Controller”da bulunan “endpoint”ler listelenmiştir. Ayrıca, “Entity”ler de sayfanın altında bulunabilir.

 

Rest api dokümantasyonu

 

Swagger-ui sayfasında, API endpoint’lere istek gönderilebilir ve dönen yanıtlar kontrol edilebilir. "Try It Out" örneği, güvenlik kullanımını da içeren sonraki bölümde gösterilecektir.

 

Endpoint’lerin yanı sıra, “Entity” ve “alanlar”ı da görülebilir. Aşağıda görüldüğü gibi, alanlara ait “validation”lar da modele eklenmiştir. @NotNull ve @Size anotasyonları ile "projectName" alanı zorunlu olarak işaretlenmiş ve "projectCode" uzunluğunun da 0 ile 5 arasında olması gerektiği belirtilmiştir.

 

swagger model

 

Spring Security ile Kullanımı

 

REST API’de “authentication” kullanılmadığı durumda ancak Swagger-ui, yukarıdaki yapılandırma ile kullanılabilir. Bilindiği üzere, web servislerini yetkilendirme ve kontrol adımları olmadan kullanmak nadir görülebilir. Bu nedenle, bu bölümde Swagger'ı “Spring Securtiy” ile nasıl yapılandıracağımızı göreceğiz.

 

Tarayıcıdan swagger-ui adresine erişmek için, ilk olarak izin listesi düzenlenmelidir. Aşağıda gösterildiği gibi Swagger ile ilgili adresler, "WebSecurityConfigurerAdapter"ı implement eden yapılandırma sınıfınıza eklenmeli ve “permitAll” ile izin verilmelidir.

 

web security configurer adapter

 

Spring Security ile swagger kullanımı

 

Spring Boot ve Security ile Swagger Kullanımı

 

Swagger ile ilgili adresleri izin listesine eklemek, "swagger-ui" sayfasına erişmek için yeterlidir. “Controller Class”ları, “Endpoint”ler ve “Entity”ler, yukarıda gösterildiği gibi tarayıcıda görülebilir.

 

REST API'nin endpoint’lerine erişmek ve çağırmak için ise, SecurityContext ve SecurityScheme de “Docket Bean”e eklenmelidir.

 

swagger docket bean

 

SecurityScheme ve SecurityContext örnek tanımlamaları aşağıda görülebilir. SecurityScheme için aşağıdaki örnekte “JWT” kullanımı gösterilmiştir.

 

Security scheme ve Security context

 

Bu örnekle beraber, güvenli REST API'lerde de swagger üzerinden endpoint’lere istek gönderebilirsiniz. Böylece Swagger-ui sayfasında, istekleri gönderebilmek için yetkilendirmeyi sağlayacak yeni bir "Authorize" butonu eklenmiş oldu.

 

Swagger authorize butonu

 

"Authorize" butonuna tıkladığınızda bir pencere açılır ve buraya kimlik doğrulaması için “token”ı yazabilirsiniz. Başarılı bir kimlik doğrulamasından sonra, endpoint’ler çağrılabilir.

 

swagger authorize token

 

Yetkilendirme isteyen bir endpoint bu şekilde çağrılabilir. API endpoint’e "execute" butonu ile istek gönderilirken, “header”a token eklenir. API endpoint’ten dönen JSON cevabı ise, “Response Body” içinde görülebilir.

 

Swagger project controller

 

Swagger project controller