Spring OAuth 2.0 Resource Server JWK ile Token Doğrulama

Ferhat Aykan
3 min readJun 29, 2020

--

Bir önceki yazımızda Resource Server kendisine gelen her isteği valid olup olmadığını Authorization Server’a sorarak öğreniyordu. Bu yazımızda bu bağımlılığı kaldıracağız.

JWK yöntemiyle, Resource Server’ımız ilk ayağa kalkarken Authorization Server’ımızdan daha önce oluşturduğumuz jks dosyasının bilgilerini alacak. Kendisine gelen her isteği doğrulama yapabilecek. Burada tek bağımlılık uygulamaya gelen ilk istekte Authorization Server’a gideceğinden Authorization Server’ın ayakta olması gerekiyor.

Projemizde JWK kullanabilmek için bir kaç konfigürasyonu değiştirmemiz gerekiyor.

Auth Service’mize gelerek

CustomHeaderJwtAccessTokenConverter class’ını ekliyoruz. Burada JwtAccessTokenConverter class’ını extends edip token’a custom header vererek oluşturulmasını sağlıyoruz.

Daha sonra JWTConfiguration’a girerek

jwtAccessTokenConverter’ı düzenliyoruz. Custom Header olarak ‘kid’ şeklinde parametre geçiyoruz. Bunun nedeni Resource Server’lar Authorization Server’dan aldığı bilgilerin hangi Authorization Server’dan aldığını bilmek istiyor.

We face a new problem now; since Spring Security OAuth doesn’t support JWK, the issued JWTs won’t include the kid Header.

JWKSet bean’ınıda burada tanımlıyoruz. Resource Server’lar jks bilgilerine ulaşmak için Authorization Server’lara istekte bulunacak. Burada JWKSet kullanarak bu değerleri döneceğiz. JWKSet oluşturmak için RSAKey class’ını kullanmamız gerekli. Bunun içinde aşağıdaki dependency’i ‘aut-service’ projemize eklememiz gerekiyor.

<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId>
<version>7.9</version>
</dependency>

Authorization Server’dan jks bilgilerini Resource Server’lara verebilmek için yeni bir endpoint ekliyoruz.

Resource Server’lardan uygulama ayağa kalkarken bu endpoint’e erişebilmesi için ‘auth-service’de ‘permitAll()’ olarak yetkisini düzenliyoruz.

Postman kullanarak ‘/jwk.json’ endpoint’ine giderek gerekli bilgilerin döndüğünden emin oluyoruz.

Authorization Server tarafındaki işlemlerimizi tamamladık, Resource Server’ımızı yani Product Api’mizi JWK ile token doğrulaması yapabilir hale getirelim.

Resource Server için tek yapmamız gereken application.yml dosyasında JWK datasını nereden alacağını belirtiyoruz. Uygulamaya gelen ilk istekte ‘auth-service’den JWK içeriğini aldıktan sonra bir daha auth-service’e istekte bulunmayacak.

Bir sonraki yazımızda Public Key kullanarak gelen token’un doğrulamasını yapalım.

İyi çalışmalar.

--

--