Spring OAuth 2.0 Resource Server Authorization Server ile Token Doğrulama

Ferhat Aykan
3 min readJun 29, 2020

--

Bir önceki yazımızda grant type olarak client credentials ile token almıştık. Bu yazımızda aldığımız token ile Resource Server‘ımızdan resource’lere erişeceğiz. Her oluşturacağım client için AuthorizationServerConfiguration class’ımızda client tanımlaması yapacağım. Ilk olarak yeni client tanımlaması yapalım.

Product Api için client tanımlamasını en alta ekledik. Birde security kısmına ‘checkTokenAccess’ yapabilecek client’ların ‘ROLE_CHECK_TOKEN’ yetkisine sahip olması gerektiğini söylüyoruz. Product Api’nin yetkilerine ‘ROLE_CHECK_TOKEN’ yetkisini veriyoruz.

Projemize Product Api şeklinde yeni bir maven module ekliyoruz.

Product Api’mizin token alırken kullanacağı client bilgilerini ‘application.yml’da tanımladık. Resource olarakta ‘token-info-uri’ bilgisi verdik. Bu url Spring OAuh 2.0'da ‘/oauth/check_token’ framework endpoint olarak tanımlanmış.

‘/oauth/check_token’ endpoint’i Resource Server’a gelen isteklerdeki token bilgisi valid olup olmadığını ‘ROLE_CHECK_TOKEN’ yetkisiyle Authorization Server sormak için kullanılıyor. Her gelen request’de valid olup olmadığını sorduğu için performans olarak kötü yönde etkiliyor. Sonraki yazılarımızda bu yöntemin alternatifini kullanacağız. Bu şekilde her seferinde Authorization Server’a gitmeyeceğiz.

Projemize model olarak ProductResponse ekliyoruz.

ProductService’mizde istenilen product datalarını çekmek için oluşturuyoruz.

ProductController ise rest olarak sunacağımız endpoint’leri oluşturuyoruz.

Uygulamamızı ResourceServerConfiguration tanımlaması yapmadan bu şekilde çalıştırdığımızda tüm endpoint’lere ulaşım authenticated olacaktır. Spring Security dependencies’lerden gelen filter’lar bunu sağlıyor.

ResourceServerConfiguration’ını yapmaya başlayalım.

@EnableResourceServer diyerek uygulamamızın configuration’ını yapıyoruz.
Session Stateless olması yani hiç bir şekilde cookie yada session tutulmaması için STATELESS olarak veriyoruz. Her seferinde gelen request token ile gelip valid olduğunda resource ulaşacaktır.

Uygulamamızı çalıştırmadan önce ilk ‘auth-service’imizi çalıştıyoruz. Bunun nedeni Resource Server’daki resorce’lere ulaşırken gönderdiğimiz token’u her seferinde Auth Service’e gönderip doğrulama işlemi yapılacak.

ProductController’daki products data’sına erişmek için ilk Auth Service’den bir token alacağız.

Sonrasında bu token ile Resource Server’ımıza gidip products datasını alacağız. Token bilgisini bearer olarak header’ımıza ekliyoruz.

Eğer token göndermeseydik aşağıdaki resim gibi 401 Unauthorized alacaktık.

Projemize WebSecurityConfiguration ekleyerek Swagger, static dosyalarımızı dışarıya açabiliriz.

@EnableGlobalMethodSecurity ekleyerek methodlarımızda @Secured kullanabilir özel yetkilendirme yapabiliriz.

Gerekli yetkiniz olmadığında

403 Forbidden alacağız.

Sonraki yazımızda Resource Server’ımız token doğrulamalarını JWK ile yapacak şekilde tanımlayacağız. Her seferinde Auth Service gitmeye gerek kalmayacak.

İyi çalışmalar.

--

--