Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Search
Menu

Apa itu Token Web JSON (JWT)? Mengapa API Menggunakannya?

Posted on August 21, 2022

Standar JSON Web Tokens (JWT) menjelaskan metode ringkas untuk transfer data yang dapat diverifikasi. Setiap token berisi tanda tangan yang memungkinkan pihak penerbit untuk memeriksa integritas pesan.

Dalam artikel ini, Anda akan mempelajari apa yang termasuk dalam struktur JWT dan bagaimana Anda dapat menghasilkan token Anda sendiri. JWT adalah cara populer untuk mengamankan API dan mengautentikasi sesi pengguna karena sederhana dan mandiri.

Bagaimana JWT Bekerja

Salah satu tugas paling umum di API apa pun adalah memvalidasi bahwa pengguna adalah siapa yang mereka klaim. Otentikasi biasanya ditangani dengan meminta klien menyertakan kunci API dengan permintaan yang dikirimnya ke server. Kunci berisi informasi tertanam yang mengidentifikasi pengguna. Ini masih menyisakan satu pertanyaan besar: bagaimana server dapat memvalidasi bahwa ia mengeluarkan kunci di tempat pertama?

JWTs dengan mudah memecahkan masalah ini dengan menggunakan rahasia untuk menandatangani setiap token. Server dapat memeriksa validitas token dengan mencoba menghitung ulang tanda tangan yang disajikan menggunakan rahasia pribadinya. Setiap gangguan akan menyebabkan verifikasi gagal.

Format JWT

JWT dibentuk dari tiga komponen berbeda:

Header – Ini termasuk metadata tentang token itu sendiri, seperti algoritma penandatanganan yang digunakan.Payload – Muatan token dapat berupa data arbitrer yang relevan dengan sistem Anda. Ini dapat mencakup ID pengguna dan daftar fitur yang dapat berinteraksi dengan mereka. Tanda Tangan – Tanda tangan memungkinkan integritas token divalidasi di masa mendatang. Itu dibuat dengan menandatangani header dan payload menggunakan nilai rahasia yang hanya diketahui oleh server.

Ketiga komponen ini digabungkan dengan titik untuk menghasilkan JWT:

header.payload.signature

Setiap bagian dikodekan menggunakan Base-64. Token lengkap adalah string teks yang dapat dengan mudah digunakan di lingkungan pemrograman dan dikirim dengan permintaan HTTP.

Membuat JWT

Langkah-langkah untuk membuat JWT dapat diterapkan di semua bahasa pemrograman. Contoh ini menggunakan PHP tetapi prosesnya akan serupa di sistem Anda sendiri.

Mulailah dengan membuat header. Ini biasanya mencakup dua bidang, alg dan ketik:

alg – Algoritma hashing yang akan digunakan untuk membuat tanda tangan. Ini biasanya HMAC SHA256 (HS256).typ – Jenis token yang dihasilkan. Ini seharusnya JWT.

Inilah JSON yang mendefinisikan header:

{ "alg": "HS256", "typ": "JWT" ​​}

Header JSON harus dikodekan Base64 selanjutnya:

$headerData=["alg" =>"HS256","typ"=>"JWT"];
$header=base64_encode(json_encode($headerData));

Selanjutnya tentukan payload token Anda sebagai objek JSON lainnya. Ini khusus aplikasi. Contoh ini menawarkan detail akun pengguna yang diautentikasi, serta informasi tentang token itu sendiri. exp, iat, dan nbf adalah bidang yang digunakan oleh konvensi untuk menyatakan waktu kedaluwarsa token, dikeluarkan pada waktu, dan tidak valid sebelum waktu (mulai). Payload juga harus dikodekan Base64.

$payloadData=["userId"=>1001,"userName"=>"demo","licensedFeatures"=>["todos","calendar","invoicing"], "exp"=>(time()+900),"iat"=>time(),"nbf"=>time()];
$payload=base64_encode(json_encode($payloadData));

Yang tersisa adalah membuat tanda tangan. Untuk menghasilkan ini, pertama-tama Anda menggabungkan header dan payload menjadi satu string yang dipisahkan oleh . character:

$headerAndPayload="$header.$payload";

Selanjutnya Anda harus membuat rahasia unik untuk digunakan sebagai kunci penandatanganan Anda. Rahasia harus disimpan dengan aman di server Anda dan tidak boleh dikirim ke klien. Paparan nilai ini akan memungkinkan siapa pun untuk membuat tokens.

// metode PHP yang valid untuk menghasilkan 32 karakter acak
$secret=bin2hex(openssl_random_pseudo_bytes(16));

Anda menyelesaikan proses dengan menggunakan rahasia untuk menandatangani header gabungan dan string payload menggunakan algoritma hashing yang Anda tunjukkan di header. Tanda tangan keluaran harus dikodekan Base64 seperti komponen lainnya.

$signature=base64_encode(hash_hmac("sha256",$headerAndPayload,$secret,true));

Sekarang Anda memiliki header, payload, dan tanda tangan sebagai teks individual komponen. Bergabunglah dengan mereka semua bersama-sama dengan . pemisah untuk membuat JWT untuk dikirim ke klien Anda:

$jwt="$header.$payload.$signature";

Memverifikasi JWTs

Aplikasi klien dapat menentukan fitur yang tersedia bagi pengguna dengan mendekode muatan token. Berikut ini contoh dalam JavaScript:

const tokenComponents = jwt.split(".");
const payload = token[1];
const payloadDecoded = JSON.parse(atob(payload)); 
// ["todos", "calendar", "invoicing"] 
console.log(payloadDecoded.licensedFeatures);

Seorang penyerang mungkin menyadari bahwa data ini adalah teks biasa dan terlihat mudah dimodifikasi. Mereka dapat mencoba meyakinkan server bahwa mereka memiliki fitur bonus dengan mengubah payload token di permintaan berikutnya:

// Buat komponen payload baru
const modifiedPayload = btoa(JSON.stringify({ ...payloadDecoded, licenseFeatures:[" todos", "kalender", "faktur", "Fitur ExtraPremium"]})); 
// Jahit kembali JWT dengan header asli dan signature
const newJwt = `${token[0]}.${modifiedPayload}.${token[2]}`

Jawaban tentang bagaimana server bertahan dari serangan ini terletak pada metode yang digunakan untuk menghasilkan tanda tangan. Nilai tanda tangan memperhitungkan header dan muatan token. Memodifikasi payload, seperti dalam contoh ini, berarti tanda tangan tidak lagi valid.

Kode sisi server memverifikasi JWT yang masuk dengan menghitung ulang tanda tangannya. Token telah diubah jika tanda tangan yang dikirim oleh klien tidak cocok dengan nilai yang dihasilkan di server.

$tamperedToken=$_POST["apiKey"];list($header,$payload,$signature)=$tamperedToken ; // Tentukan tanda tangan yang dimiliki token ini *harus* // ketika rahasia server digunakan sebagai kunci$expectedSignature=hash_hmac("sha256","$header.$payload",$secret,true); // Token telah dirusak karena // tanda tangannya salah untuk data yang disertakanif($signature!==$expectedSignature){ http_response_code(403);}// Tanda tangan cocok - kami membuat token // ini dan dapat dengan aman mempercayai dataelse{$user= fetchUserById($payload["userId"]);}

Penyerang tidak mungkin membuat token yang valid tanpa akses ke rahasia server. Ini juga berarti bahwa kehilangan yang tidak disengaja – atau rotasi yang disengaja – dari rahasia akan segera membatalkan semua token yang dikeluarkan sebelumnya.

Dalam situasi dunia nyata, kode autentikasi Anda juga harus memeriksa kedaluwarsa dan cap waktu “bukan sebelum” dalam muatan token. Ini digunakan untuk menentukan apakah sesi pengguna masih valid.

Kapan Menggunakan JWTs

JWT sering digunakan untuk autentikasi API karena mudah diterapkan di server, mudah digunakan di klien, dan mudah dikirim melintasi batas jaringan. Terlepas dari kesederhanaannya, mereka memiliki keamanan yang baik karena setiap token ditandatangani menggunakan kunci rahasia server.

JWTs adalah mekanisme tanpa kewarganegaraan sehingga Anda tidak perlu mencatat informasi tentang token yang diterbitkan di server Anda. Anda bisa mendapatkan informasi tentang klien yang menyajikan JWT dari payload token, daripada harus melakukan pencarian di database. Informasi ini dapat dipercaya dengan aman setelah Anda memverifikasi tanda tangan token.

Menggunakan JWT adalah pilihan yang baik kapan pun Anda perlu bertukar informasi antara dua pihak tanpa risiko gangguan. Ada titik lemah yang harus diperhatikan: seluruh sistem akan dikompromikan jika kunci rahasia server Anda bocor, atau kode verifikasi tanda tangan Anda mengandung bug. Untuk alasan ini banyak pengembang memilih untuk menggunakan perpustakaan sumber terbuka untuk mengimplementasikan pembuatan dan validasi JWT. Opsi tersedia untuk semua bahasa pemrograman populer. Mereka menghilangkan risiko pengawasan saat Anda memverifikasi token sendiri.

Kesimpulan

Standar JWT adalah format pertukaran data yang mencakup verifikasi integritas bawaan. JWT biasanya digunakan untuk mengamankan interaksi antara server API dan aplikasi klien. Server dapat mempercayai token yang masuk jika dapat mereproduksi tanda tangannya. Hal ini memungkinkan tindakan dilakukan dengan aman menggunakan informasi yang diperoleh dari payload token.

JWT nyaman tetapi memiliki beberapa kelemahan. Representasi tekstual yang disandikan Base64 JWT dapat dengan cepat menjadi besar jika Anda memiliki lebih dari beberapa bidang muatan. Ini bisa menjadi biaya tambahan yang tidak dapat diterima ketika klien Anda perlu mengirim JWT dengan setiap permintaan.

Ketidakbernegaraan JWT juga merupakan potensi kerugian lain: setelah dikeluarkan, token tidak dapat diubah dan harus digunakan apa adanya sampai kedaluwarsa. Klien yang menggunakan muatan JWT untuk menentukan izin pengguna atau fitur berlisensi perlu mendapatkan token baru dari backend setiap kali penetapan mereka berubah.

Itulah berita seputar Apa itu Token Web JSON (JWT)? Mengapa API Menggunakannya?, semoga bermanfaat. Disadur dari HowToGeek.com.

Terbaru

  • Pengertian Rework Magic Wheel dan Rank Mythic Eternal: Apa itu Perubahan Sistem Baru Mobile Legends?
  • Apa Itu Diamond Combo? Pengertian Game Puzzle Viral yang Katanya Bisa Hasilkan Cuan
  • Apa Itu Showbox? Pengertian, Fungsi, dan Cara Menggunakannya di Android
  • Cara Mengatasi Fitur Monet Facebook Pro Tiba-tiba Hilang
  • Google Bikin Kejutan! Pixel 10 Diskon Gila-gilaan di YouTube Premium
  • Apa Itu Google CC? Ini Pengertian Agen Produktivitas AI Eksperimental Terbaru
  • Apa Itu Ultras Seblak di eSport? Pengertian dan Fenomena Baru Suporter eSport
  • Android 16: Animasi Folder Baru yang Mengubah Cara Kita Berinteraksi!
  • Android 16: Notifikasi Lokasi ‘Blue Dot’ – Fitur Baru yang Perlu Kalian Ketahui!
  • Apa Itu Risiko Auto Click di Event Spongebob Mobile Legends? Ini Penjelasannya
  • Apa Itu Fitur Eksperimental Windows? Ini Pengertian dan Cara Menonaktifkannya
  • Apa Itu Android 16 Beta 1? Ini Pengertian dan Fitur Terbarunya
  • Belum Tahu? Ini Trik Supaya Bisa Dapat Skin Patrick Mobile Legends dengan Harga Murah
  • Pixel Desember 2025: Update Besar Siap Meluncur, Apa yang Baru?
  • Apa Itu HYFE XL Prioritas? Ini Pengertian, FUP, dan Realita Kecepatannya
  • Pengertian Render dan Convert: Apa Bedanya dalam Video Editing?
  • Cara Mengatasi Aplikasi Office yang Terus Muncul dan Menerapkan Perubahan Pengaturan Privasi
  • Pixel Launcher Mendapatkan Sentuhan Google Search Baru!
  • Penyebab Aplikasi Wondr BNI Tidak Bisa Dibuka
  • Kode 0425 Daerah Mana? Ini Pengertian dan Fakta Sebenarnya
  • Apa Itu SSS CapCut? Pengertian Downloader Video Tanpa Watermark yang Wajib Kalian Tahu
  • Apa Itu Paket GamesMAX Telkomsel? Ini Pengertian dan Fungsinya Bagi Gamers
  • Apa Itu Menu Plus di Google Search? Ini Pengertian dan Fungsinya
  • Apa Itu Lepas Kolpri? Ini Pengertian dan Fenomenanya di Dunia Gaming
  • Pixel Buds Pro Dapat Update Software dengan Dukungan ANC Adaptif dan Peningkatan Audio
  • Mous Pixel Watch 4 Akan Hadir dengan Charger Baru dan Fitur-Fitur Terbaru
  • Hati-hati, Video Asli Botol Golda Viral Season 4 Full 6.30 Menit, Cek Link dan Faktanya disini!
  • Google Docs Dapat Update Material 3 dan Desain Ekspresif Baru, Fokus pada Kreativitas dan Kolaborasi
  • Belum Tahu? Ini Trik Hitung Cost Per Gigabyte Supaya Gak Boncos Saat Beli Paket Internet
  • Apple TV dan Google Cast Akan Terintegrasi Lebih Dalam, Tawarkan Pengalaman Streaming yang Lebih Baik
  • Apa Itu Platform Modular Intel Alder Lake N (N100)? Ini Pengertian dan Spesifikasinya
  • Apa Itu Armbian Imager? Pengertian Utilitas Flashing Resmi untuk Perangkat ARM Kalian
  • Apa Itu OpenShot 3.4? Pengertian dan Fitur LUT Terbaru untuk Grading Warna
  • Flatpak 1.16.2: Sandbox Baru untuk GPU Intel Xe dan VA-API
  • Apa Itu EmmaUbuntu Debian 6? Pengertian Distro Ringan Berbasis Trixie untuk PC Lawas
  • Apa Itu Nemotron-3 Nano? Pengertian Model Bahasa Ringkas dan Hasil Uji Cobanya
  • Prompt AI Dapur Aestetik
  • Prompt AI Suami Istri Bawa Terong
  • Prompt AI Touring Motor di Stadion GBK
  • Prompt AI Foto Jadul Kebaya Merantau Belanda
  • Apa Itu Insiden Peretasan Kementerian Dalam Negeri Prancis? Kronologi dan Dampaknya
  • Apa Itu DPRK Threat Actors? Ini Pengertian dan Sepak Terjangnya dalam Pencurian Kripto Global
  • Apa itu Insiden Siber DXS International? Pengertian dan Dampaknya pada NHS
  • Apa Itu Warrantless Search Google? Pengertian dan Dampaknya Bagi Privasi Kita
  • Kronologi Kasus Malware Kapal Feri Fantastic
Beli Morning Star Kursi Gaming/Kantor disini: https://s.shopee.co.id/805iTUOPRV
Beli Pemotong Rumput dengan Baterai IRONHOOF 588V Mesin Potong Rumput 88V disini https://s.shopee.co.id/70DBGTHtuJ

©2025 emka.web.id | Design: Newspaperly WordPress Theme