Tutorial Implementasi OAuth2 + JWT dengan Java Spring Boot (Resource Server) Dynamic #Client_Credentials

Septian Reza Andrianto
5 min readDec 31, 2022

--

Hallo teman-teman semua, kali ini saya ingin share sedikit pengetahuan yang saya punya tentang bagaimana cara implementasi security menggunakan OAuth2 grantType Client_Credentials di Spring boot.
Langsung aja ya, pertama kita generate spring boot projectnya di https://start.spring.io/

Dependency yang saya gunakan adalah :

  1. Spring Boot DevTools
  2. Lombok
  3. Spring Web
  4. Spring Data JPA
  5. PostgreSQL Driver
  6. OAuth2 Resource Server
  7. Spring Security

Selanjutnya adalah download JWT dependecy, menggunakan link tersebut https://mvnrepository.com/artifact/org.springframework.security/spring-security-jwt/1.1.1.RELEASE

Jika sudah silahkan copy dan paste ke dalam file pom.xml pada project yang telah digenerate tadi

Langkah selanjutnya adalah kita pergi kedalam package resources dan kita lakukan konfigurasi pada file application.yml (karena pada project ini saya menggunakan yml file, teman-teman bisa sesuaikan jika menggunakan application.properties)

Selanjutnya, kita buat package baru dengan nama entity, kemudian kita buat class model dengan nama ClientCredential.java (disini saya buat nama class model seperti nama table pada database yang saya buat).

Setelah kita buat class modelnya, selanjutnya kita buat package baru dengan nama repository dan membuat file interface baru dengan nama ClientCredentialRepository.java, (sebetulnya ini adalah opsi, saya melakukan ini agar kita bisa menggunakan dynamic client_id dan client_secretnya).

Selanjutnya kita buat package baru dengan nama service, dan kita buat class service dengan nama ClientDetailService.java

Selanjutnya kita akan mencoba untuk mengcustom exception, mari kita buat package baru dengan nama exception kemudian kita buat 3 file baru dengan nama CustomOauthException.java, CustomOauthExceptionSerializer.java, MyWebExceptionTranslatot.java

Selanjutnya kita buat package baru dengan nama config kemudian buat file dengan nama WebSecurityConfig.java, untuk konfigurasi security dan juga untuk menghandle cors

Selanjutnya masih dalam package config, kita buat lagi 1 file baru dengan nama AuthorizationServerConfig.java

Selanjutnya kita buat method untuk memvalidasi service (resource owner) yang hit ke resource service kita, disini saya buat methodnya didalam file Application.java

Oke, sudah selesai konfigurasi OAuth2 pada Springboot kita, sekarang saya akan coba buat sebuah controller untuk memvalidasi OAuth2 kita.

Selanjutnya kita akan coba validasi service OAuth2 kita menggunakan postman, pertama saya akan coba hit endpoint hello tanpa memasukan accessToken OAuthnya.

Nah, jika kita tidak memberikan accessToken kepada endpoint hello, maka kita akan mendapatkan response http status 401 / unauthorized dengan kata lain kita tidak mendapatkan izin untuk mengakses endpoint tersebut. Selanjutnya saya akan mencoba untuk case successnya.
Pertama saya akan hit endpoint OAuth2 nya agar mendapatkan accessToken yang akan kita pakai agar bisa mengkases endpoint hello terebut.

Disini kita punya 2 cara untuk memasukan basic auth, pertama bisa kita isi pada bagian Authorizationnya dengan memilih Basic Auth, kemudian kita masukan client_id dan client_secret yang kita simpan pada db kita tadi, atau opsi 2 kita bisa measukan basic auth tersebut kedalam header dengan format Base64(client_id:client_secret). Jika sudah kita pindah kebagian body dan kita pilih x-www-form-urlencoded dan kita masukan grant_type : client_credentials.

Nah disini kita sudah berhasil mendapatkan acces_token yang akan kita gunakan agar dapat mengkases endpoint hello, namun sebelum itu saya ingin cek kevalidan token tersebut, kita bisa cek ke https://jwt.io/

Kemudian kita copy dan paste access_tokennya

Kalau kita lihat token ini bisa dipakai hanya 900 detik / sekitar 15 menit. Sekarang mari kita coba hit kembali endpoint hello dengan memasukan access_token tersebut sebagai bearer tokennya.

Nah sekarang kita sudah mendapatkan izin untuk mengakses endpoint hello tersebut.

Oke, cukup sekian dulu sharing dari saya, semoga bermanfaat untuk kita semua.

Jika kalian bingung kalian bisa langsung clone project OAuth2 ini : https://github.com/septianrezaandrianto/oauth2-auth-server

Sampai ketemu lagi ditutorial selanjutnya, untuk grantType password, refresh_token dan Resource Owner.

See yaaa……..

--

--

Septian Reza Andrianto

I'm a Software Engineer with more than three years experiences