Implementasi Autentikasi Sederhana Menggunakan Basic Authentication di Spring

Ichwan Sholihin
4 min readNov 16, 2023
Photo by Markus Spiske on Unsplash

Halo semua, pada artikel kali ini saya akan membahas otorisasi dasar dengan Basic Auth pada aplikasi Back-End di Spring. Namun sebelum membahas bagaimana cara implementasinya, Anda harus pahami terlebih dahulu apa itu otentikasi dan perbedaannya dengan otorisasi.

Dalam KBBI, autentikasi adalah proses, cara, perbuatan membuktikan sesuatu secara autentik yang berarti ketika kita masuk kedalam sebuah sistem, maka diperlukan sebuah identitas atau pengenal sebelum mengakses seperti alamat email, foto kartu tanda pengenal dan lain-lain. Sementara itu, otorisasi adalah pemberian kekuasaan untuk menggunakan data atau sistem yang disimpan yang berarti seorang admin memberikan izin kepada pengguna untuk mengakses sumber tertentu yg terdapat pada sistem tersebut.

Basic Auth sendiri merupakan salah satu metode untuk mengamankan aplikasi Java yang terdapat pada framework Spring Security yang direkomendasikan untuk melakukan keamanan pada mode development. Selain Basic Auth, terdapat juga JWT (JSON Web Token), OAuth, AWS Signature dll. Namun pada artikel ini, kita kerucutkan pada pembahasan implementasi Basic Auth.

Mengenal Spring Security

Spring Security adalah framework yang berfokus pada penyediaan autentikasi dan otorisasi untuk aplikasi Java. Tujuan utama dari Spring Security adalah untuk melindungi aplikasi dari berbagai serangan keamanan dan menyediakan kontrol akses yang kuat. Dengan menggunakan Spring Security, pengembang dapat mengimplementasikan otentikasi (proses verifikasi identitas pengguna) dan otorisasi (pengendalian hak akses pengguna) dengan cara yang terintegrasi dan aman.

Beberapa fitur utama dari Spring Security meliputi:

  1. Otentikasi (Authentication): Spring Security mendukung berbagai metode otentikasi, termasuk otentikasi berbasis formulir, otentikasi berbasis token, dan otentikasi LDAP. Pengembang dapat mengonfigurasi otentikasi sesuai kebutuhan aplikasi mereka.
  2. Otorisasi (Authorization): Spring Security memungkinkan pengembang mendefinisikan aturan akses untuk setiap bagian dari aplikasi. Ini dilakukan dengan mengonfigurasi izin pada tingkat URL, metode, atau objek tertentu.
  3. Proteksi terhadap Serangan: Spring Security membantu melindungi aplikasi dari berbagai serangan keamanan, seperti serangan injeksi SQL, cross-site scripting (XSS), dan cross-site request forgery (CSRF).
  4. Integrasi dengan Spring Framework: Spring Security dirancang untuk terintegrasi dengan baik dengan proyek-proyek Spring lainnya, seperti Spring MVC, Spring Boot, dan lain-lain.

Penggunaan Spring Security sangat umum dalam pengembangan aplikasi berbasis Java yang membutuhkan tingkat keamanan yang tinggi. Dengan menyediakan kerangka kerja yang kuat dan terintegrasi, Spring Security membantu pengembang membangun aplikasi yang aman dan dapat diandalkan. Dengan dependensi yang telah diberikan oleh Spring, kita dapat dengan mudah mengimplementasikan autentikasi secara sederhana untuk melindungi data sensitif pada sistem.

Implementasi Basic Auth di Spring

Implementasi Basic Auth di Spring dapat menggunakan interface SecurityFilterChain dengan membuat sebuah konfigurasi khusus untuk menangani pengaturan keamanan aplikasi. Sebelumnya, tambahkan dependesi spring-security pada pom.xml ataupun file gradle. Anda juga dapat mendownload secara manual library dependensi tersebut pada halaman ini.

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

Lalu buatlah sebuah class SecurityConfig.java pada project Spring Anda serta implementasikan annotation @EnableWebSecurity dan tambahkan method securityFilterChain()

@Configuration
@EnableWebSecurity
public class SecurityConfig {

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http)
throws Exception {
http.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.httpBasic();
return http.build();
}
}

Pada classSecurityConfig, sebuah bean SecurityFilterChain didefinisikan menggunakan method securityFilterChain. Bean ini bertanggung jawab untuk mengatur security config pada aplikasi Spring.

Pertama, method ini mengambil parameter HttpSecurity http, yang mewakili konfigurasi keamanan untuk aplikasi web. Dengan menggunakan http.authorizeRequests(), aturan otorisasi ditentukan. Dalam kasus ini, .anyRequest().authenticated() menyatakan bahwa setiap permintaan harus diautentikasi, artinya pengguna harus memberikan kredensial atau password yang valid untuk mengaksesnya.

Kemudian, .and().httpBasic() menunjukkan bahwa autentikasi akan dilakukan menggunakan Basic Authentication. Ini berarti user harus menyertakan header Authorization dengan kredensial (username dan password) setiap kali membuat permintaan. Method .and() digunakan untuk menggabungkan konfigurasi otorisasi dan autentikasi.

Terakhir, return value dari method securityFilterChain adalah hasil dari http.build(), yang memberikan konfigurasi keamanan yang telah dikonfigurasi ke bean SecurityFilterChain. Dengan demikian, konfigurasi ini diaplikasikan pada aplikasi Spring, memastikan bahwa setiap permintaan memerlukan autentikasi menggunakan Basic Authentication sebelum diizinkan melanjutkan ke sumber daya yang diminta.

Testing Basic Auth dengan Postman

Untuk menguji apakah spring security berjalan, silakan akses API ke browser, maka ketika Anda mengakses URL local akan muncul pop-up untuk memasukkan username dan password.

Jika Anda menggunakan API Testing tools seperti Postman atau Thunder Client (extensions di VS Code) maka response JSON tidak akan ditampilkan serta mendapatkan HTTP status code 403 Forbidden yang berarti Anda tidak diizinkan mengakses data.

Lalu dari mana kita mendapatkan username dan password untuk melakukan autentikasi? Canggihnya spring security, ketika kita menjalankan aplikasi spring secara otomatis akan menyediakan password kita pada terminal.

Terdapat pesan dibawah password yang artinya hasil generate tersebut hanya dapat digunakan pada mode development. Jika Anda men-deploy aplikasi tersebut ke production, disarankan untuk memperbarui security config seperti menggunakan OAuth atau JWT (JSON Web Token).

Untuk mencoba login, gunakan username = user dan masukan password hasil generated security. Jika menggunakan Postman untuk API Testing tools, pilih menu Authorization dan Type = Basic Auth.

Pada Thunder Client, pilih menu Auth dan submenu Basic

Semoga bermanfaat.

--

--