Cara mengamankan Spring Boot dengan Otentikasi dan Otorisasi JWT
Halo para pembelajar, disini kita akan belajar tentang implementasi keamanan pegas dengan spring boot3.0 dan JWT. Ini lanjutan dari Spring Security part 1: Link disana kita bahas implementasi spring security role based, kali ini kita akan bahas cara mengimplementasikan JWT.
JWT (Token Web JSON) adalah standar untuk merepresentasikan klaim secara aman antara dua pihak. Ini adalah cara yang ringkas dan aman URL untuk mewakili klaim yang akan ditransfer antara dua pihak. JWT terdiri dari tiga bagian: header, payload, dan tanda tangan.
Header terdiri dari algoritma dan tipe token, Payload terdiri dari subject,name,issuedat, Verify Signature adalah kombinasi dari encoded header, payload dan secret key. Token JWT adalah kombinasi dari ketiganya
Spring Security dapat diintegrasikan dengan JWT untuk mengamankan aplikasi web dengan membuat, mem-parsing, dan memvalidasi JWT.
Berikut ini adalah ikhtisar tentang cara kerja otentikasi dan otorisasi JWT di Spring Boot :
- Otentikasi pengguna: Saat pengguna masuk ke sistem, server memverifikasi kredensial pengguna, seperti nama pengguna dan kata sandi mereka. Jika kredensial benar, server membuat JWT untuk pengguna dan mengembalikannya ke klien.
- Pembuatan JWT: Server membuat JWT dengan menyandikan informasi identitas pengguna dan data lain yang diperlukan, seperti waktu kedaluwarsa, menjadi objek JSON. Objek JSON kemudian ditandatangani menggunakan kunci rahasia atau pasangan kunci publik/pribadi.
- Penyimpanan token: Klien menyimpan JWT secara lokal, biasanya dalam cookie atau penyimpanan lokal.
- Otorisasi: Untuk setiap permintaan berikutnya, klien mengirimkan JWT di header permintaan. Server memverifikasi tanda tangan JWT dan menerjemahkan isinya untuk mengekstrak informasi identitas pengguna dan detail lainnya. Berdasarkan informasi ini, server kemudian dapat mengotorisasi pengguna untuk mengakses sumber daya tertentu atau melakukan tindakan tertentu.
- Validasi token: Server juga dapat memvalidasi JWT untuk memastikan bahwa JWT belum dirusak dan belum kedaluwarsa. Jika token tidak valid, server dapat menolak permintaan atau meminta pengguna untuk masuk lagi.
Langkah 1: Tambahkan dependensi JWT
Langkah 2: Buat titik akhir untuk mengautentikasi dan menghasilkan JWT
Dalam metode CreateToken, kami membuat token dengan menetapkan klaim, subjek, tanggal terbit dan kedaluwarsa, tanda tangan.
Langkah 3: Buat filter untuk memvalidasi JWT
buat kelas untuk filter dan perluas dengan OncePerRequestFilter, ganti metode doFilterInternal dan aktifkan token otorisasi dari header. Validasi token dengan mengekstrak nama pengguna dan tanggal kedaluwarsa dari token. Filer ini digunakan untuk memvalidasi token JWT untuk setiap panggilan API.
Langkah 4: Tambahkan konfigurasi untuk mengotorisasi panggilan API
Buat kelas dan tambahkan metode untuk mengotorisasi, dalam kode di atas berikan akses ke titik akhir "/ produk/baru", "/ produk/autentikasi" untuk semua pengguna, untuk titik akhir "/ produk/**" hanya pengguna yang diautentikasi dengan JWT yang valid dapat mengakses.
Menguji implementasi
Otentikasi dan Menghasilkan token
Salin token yang dihasilkan dan tambahkan ke panggilan API lainnya, saya mengakses API di bawah dengan kredensial Admin
Jika kami mencoba mengakses API dengan kredensial Admin di mana hanya pengguna yang dapat mengakses akan mendapatkan 403 Forbidden error
Catatan: Jika Anda ingin kode github yang berfungsi untuk implementasi ini, ikuti saya dan beri komentar ID email Anda. Saya akan mengirimkan tautan kode sumber ke email Anda.
Bagian 1: Akses berbasis peran Spring Security dengan Spring Boot
Rujuk tautan untuk Konsep Boot Musim Semi lainnya:
Tutorial AOP musim semi
Tutorial Logging Boot Musim Semi
Konfigurasi Terpusat di Spring Boot
Anotasi Hibernasi yang paling umum digunakan