Ada saat ketika satu-satunya cara untuk mengautentikasi diri Anda dengan aplikasi adalah dengan memberikan kredensial Anda (biasanya nama pengguna atau alamat email dan kata sandi) dan sebuah sesi kemudian digunakan untuk mempertahankan status pengguna hingga pengguna keluar. Beberapa saat kemudian, kami mulai menggunakan API autentikasi. Dan belakangan ini, JWT, atau Token Web JSON, semakin banyak digunakan sebagai cara lain untuk mengautentikasi permintaan ke server Show
Dalam artikel ini, Anda akan mempelajari apa itu JWT dan cara menggunakannya dengan PHP untuk membuat permintaan pengguna yang diautentikasi JWT versus SesiTapi pertama-tama, mengapa sesi bukan hal yang baik?
JWTSekarang, mari kita mulai belajar tentang JWT. Spesifikasi Token Web JSON (RFC 7519) pertama kali diterbitkan pada 28 Desember 2010, dan terakhir diperbarui pada Mei 2015 JWT memiliki banyak keunggulan dibandingkan kunci API, termasuk
Seperti Apa JWT Itu?Berikut adalah contoh JWT
Sepintas, tampak bahwa string hanyalah kumpulan karakter acak yang digabungkan dengan karakter titik atau titik. Dengan demikian, ini mungkin tidak jauh berbeda dari kunci API. Namun, jika diperhatikan lebih dekat, ada tiga senar yang terpisah Tajuk JWTString pertama adalah header JWT. Ini adalah string JSON yang disandikan dengan URL Base64. Ini menentukan algoritme kriptografi mana yang digunakan untuk menghasilkan tanda tangan, dan jenis token, yang selalu disetel ke 6. Algoritma dapat berupa simetris atau asimetrisAlgoritme simetris menggunakan satu kunci untuk membuat dan memverifikasi token. Kuncinya dibagi antara pembuat JWT dan konsumennya. Sangat penting bagi Anda untuk memastikan hanya pencipta dan konsumen yang mengetahui rahasianya. Jika tidak, siapa pun dapat membuat token yang valid Algoritme asimetris menggunakan kunci privat untuk menandatangani token dan kunci publik untuk memverifikasinya. Algoritma ini harus digunakan ketika rahasia yang dibagikan tidak praktis atau pihak lain hanya perlu memverifikasi integritas token Muatan JWTString kedua adalah muatan JWT. Ini juga merupakan string JSON yang disandikan dengan URL Base64. Ini berisi beberapa bidang standar, yang disebut sebagai "klaim". Ada tiga jenis klaim. terdaftar, publik, dan swasta Klaim terdaftar sudah ditentukan sebelumnya. Anda dapat menemukan daftarnya di. Berikut adalah beberapa yang umum digunakan
Klaim publik dapat didefinisikan sesuai keinginan Anda. Namun, mereka tidak boleh sama dengan klaim terdaftar, atau klaim dari. Anda dapat membuat klaim pribadi sesuka hati. Mereka hanya untuk digunakan antara dua pihak. seorang produsen dan seorang konsumen Tanda Tangan JWTTanda tangan JWT adalah mekanisme kriptografi yang dirancang untuk mengamankan data JWT dengan tanda tangan digital yang unik untuk konten token. Tanda tangan tersebut memastikan integritas JWT sehingga konsumen dapat memverifikasi bahwa JWT tidak dirusak oleh aktor jahat Tanda tangan JWT adalah kombinasi dari tiga hal
Ketiganya ditandatangani secara digital (tidak dienkripsi) menggunakan algoritme yang ditentukan di header JWT. Jika kita mendekode contoh di atas, kita akan memiliki string JSON berikut Tajuk JWT _Data JWT
Coba jwt. io untuk Anda sendiri, di mana Anda dapat bermain-main dengan encoding dan decoding JWT Anda sendiri Mari Gunakan JWT dalam Aplikasi Berbasis PHPSekarang setelah Anda mempelajari apa itu JWT, sekarang saatnya mempelajari cara menggunakannya dalam aplikasi PHP. Sebelum kita masuk lebih dalam, jangan ragu untuk mengkloning kode untuk artikel ini, atau ikuti terus dan buatlah seiring berjalannya waktu Ada banyak cara yang dapat Anda lakukan untuk mengintegrasikan JWT, tetapi inilah cara kami akan melakukannya Semua permintaan ke aplikasi, kecuali halaman masuk dan keluar, harus diautentikasi melalui JWT. Jika pengguna membuat permintaan tanpa JWT, mereka akan dialihkan ke halaman login Setelah pengguna mengisi dan mengirimkan formulir login, formulir tersebut akan dikirimkan melalui JavaScript ke endpoint login, 5, di aplikasi kami. Titik akhir kemudian akan mengekstrak kredensial (nama pengguna dan kata sandi) dari permintaan dan memeriksa apakah validJika ya, itu akan menghasilkan JWT dan mengirimkannya kembali ke klien. Ketika klien menerima JWT, itu akan menyimpannya dan menggunakannya dengan setiap permintaan di masa mendatang ke aplikasi Untuk skenario sederhana, hanya akan ada satu sumber daya yang dapat diminta pengguna — sebuah file PHP dengan tepat bernama 6. Itu tidak akan berbuat banyak, hanya mengembalikan sebuah string, yang berisi stempel waktu saat ini pada saat permintaanAda beberapa cara untuk menggunakan JWT saat mengajukan permintaan. Dalam aplikasi kita, JWT akan dikirim di header otorisasi Bearer Jika Anda tidak terbiasa dengan Otorisasi Pembawa, ini adalah bentuk autentikasi HTTP, di mana token (seperti JWT) dikirim dalam header permintaan. Server dapat memeriksa token dan menentukan apakah akses harus diberikan kepada “pembawa” token Ini contoh headernya
Untuk setiap permintaan yang diterima oleh aplikasi kita, PHP akan mencoba mengekstrak token dari header Bearer. Jika ada, itu kemudian divalidasi. Jika valid, pengguna akan melihat respons normal untuk permintaan tersebut. Namun, jika JWT tidak valid, pengguna tidak akan diizinkan untuk mengakses sumber daya Harap perhatikan bahwa JWT tidak dirancang untuk menggantikan cookie sesi PrasyaratUntuk memulainya, kita perlu menginstal PHP dan Composer di sistem kita Di root proyek, jalankan 7. Ini akan menarik Firebase PHP-JWT, pustaka pihak ketiga yang menyederhanakan bekerja dengan JWT, serta laminas-config, yang dirancang untuk menyederhanakan akses ke data konfigurasi dalam aplikasiFormulir MasukDengan perpustakaan terinstal, mari telusuri kode login di 5. Kami pertama-tama melakukan penyiapan seperti biasa, memastikan bahwa pemuat otomatis yang dihasilkan Komposer tersedia
Setelah menerima pengiriman formulir, kredensial divalidasi terhadap database, atau penyimpanan data lainnya. Untuk keperluan contoh ini, kami akan menganggap bahwa itu valid, dan menyetel 9 ke true
Selanjutnya, kami menginisialisasi satu set variabel yang akan digunakan untuk menghasilkan JWT. Harap diingat bahwa karena JWT dapat diperiksa di sisi klien, jangan sertakan informasi sensitif apa pun di dalamnya Hal lain yang perlu diperhatikan, sekali lagi, adalah 0 tidak akan diinisialisasi seperti ini. Anda mungkin akan mengaturnya di lingkungan dan mengekstraknya, menggunakan pustaka seperti phpdotenv, atau dalam file konfigurasi. Saya menghindari melakukannya dalam contoh ini, karena saya ingin fokus pada kode JWTJangan pernah mengungkapkannya atau menyimpannya di bawah kendali versi
Dengan data payload yang siap digunakan, selanjutnya kita menggunakan metode 1 statis php-jwt untuk membuat JWTMetode
Dibutuhkan tiga parameter
Dengan memanggil _2 pada hasil fungsi, token yang dihasilkan dikembalikan
Mengkonsumsi JWTSekarang klien memiliki token, Anda dapat menyimpannya menggunakan JavaScript atau mekanisme apa pun yang Anda inginkan. Berikut adalah contoh cara melakukannya menggunakan vanilla JavaScript. Di _3, setelah pengiriman formulir berhasil, JWT yang dikembalikan disimpan dalam memori, formulir login disembunyikan, dan tombol untuk meminta stempel waktu ditampilkan
Menggunakan JWTSaat mengklik tombol "Dapatkan stempel waktu saat ini", permintaan GET dibuat untuk 6, yang menetapkan JWT yang diterima setelah autentikasi di header Otorisasi
Saat kami mengklik tombol, permintaan yang mirip dengan yang berikut ini dibuat _0Dengan asumsi JWT itu valid, kita akan melihat sumber dayanya, setelah itu responsnya ditulis ke konsol Memvalidasi JWTTerakhir, mari kita lihat bagaimana kita dapat memvalidasi token di PHP. Seperti biasa, kami menyertakan autoloader Composer. Kemudian, secara opsional, kami dapat memeriksa apakah metode permintaan yang benar telah digunakan. Saya telah melewatkan kode untuk melakukan itu, untuk terus fokus pada kode khusus JWT _1Kemudian, kode akan mencoba mengekstrak token dari header Bearer. Saya telah melakukannya menggunakan preg_match. Jika Anda tidak terbiasa dengan fungsinya, fungsi tersebut akan melakukan pencocokan ekspresi reguler pada sebuah string Ekspresi reguler yang saya gunakan di sini akan mencoba mengekstrak token dari header Bearer, dan membuang yang lainnya. Jika tidak ditemukan, HTTP 400 Bad Request dikembalikan _2Perhatikan bahwa, secara default, Apache tidak akan meneruskan header 5 ke PHP. Alasan di balik ini adalah
Saya sangat menghargai logika keputusan ini. Namun, untuk menghindari banyak kebingungan, tambahkan berikut ini ke konfigurasi Apache Anda. Maka kode akan berfungsi seperti yang diharapkan. Jika Anda menggunakan NGINX, kode seharusnya berfungsi seperti yang diharapkan _3Selanjutnya, kami mencoba mengekstrak JWT yang cocok, yang akan berada di elemen kedua dari variabel 6. Jika tidak tersedia, maka tidak ada JWT yang diekstraksi, dan HTTP 400 Bad Request dikembalikan _4Jika kita sampai pada titik ini, JWT telah diekstraksi, jadi kita beralih ke tahap decoding dan validasi. Untuk melakukan itu, kita memerlukan kunci rahasia kita lagi, yang akan diambil dari lingkungan atau konfigurasi aplikasi. Kami kemudian menggunakan metode statis 7 php-jwt, meneruskannya ke JWT, kunci rahasia, dan serangkaian algoritme yang akan digunakan untuk memecahkan kode JWTJika berhasil didekodekan, kami kemudian mencoba memvalidasinya. Contoh yang saya miliki di sini cukup sederhana, karena hanya menggunakan penerbit, bukan cap waktu sebelum dan kedaluwarsa. Dalam aplikasi nyata, Anda mungkin juga akan menggunakan sejumlah klaim lain _5Jika token tidak valid karena, misalnya, token telah kedaluwarsa, pengguna akan dikirimi header HTTP 401 Unauthorized, dan skrip akan keluar Jika proses untuk mendekode JWT gagal, bisa jadi itu
Seperti yang Anda lihat, JWT memiliki seperangkat kontrol yang bagus yang akan menandainya sebagai tidak valid, tanpa perlu mencabutnya secara manual atau memeriksanya dengan daftar token yang valid. Jika proses decode dan validasi berhasil, pengguna akan diizinkan untuk membuat permintaan, dan akan dikirimkan respons yang sesuai KesimpulannyaItulah pengenalan singkat tentang JSON Web Tokens, atau JWT, dan cara menggunakannya dalam aplikasi berbasis PHP. Mulai sekarang, Anda dapat mencoba mengimplementasikan JWT di API Anda berikutnya, mungkin mencoba beberapa algoritme penandatanganan lain yang menggunakan kunci asimetris seperti RS256, atau mengintegrasikannya ke server otentikasi OAUTH2 yang ada untuk menjadi kunci API Jika Anda memiliki komentar atau pertanyaan, jangan ragu untuk menghubungi Twitter Bagikan Artikel IniMiguel Ibarra Romero Pengembang aplikasi web, administrator basis data, pemimpin proyek di berbagai aplikasi perusahaan, dan sekarang penulis artikel. Tertarik dengan desain dan pengoptimalan basis data. Kagum dan terlibat dalam pengembangan sistem terdistribusi. Penggemar kriptografi dan keamanan informasi Matius Setter Matthew Setter adalah pengembang perangkat lunak, yang berspesialisasi dalam kode PHP yang andal, teruji, dan aman. Dia juga penulis Mezzio Essentials (https. //mezzio penting. com) pengantar komprehensif untuk mengembangkan aplikasi dengan Framework Mezzio PHP Bagaimana cara menggunakan firebase JWT di PHP?Mengamankan PHP RESTful API menggunakan Firebase JWT Library . Langkah 1. Instal dan sertakan Firebase JWT(JSON WEB TOKEN) dalam proyek kami dengan mengikuti perintah komposer. . Langkah 2. Buat sisi server JWT menggunakan metode enkode Perpustakaan Firebase Jwt di Login action , dan kembalikan ke Klien Bagaimana cara menginstal perpustakaan JWT di PHP?Pertama, mulai localhost Anda kemudian pergi ke direktori htdocs atau www, dan di sini buat folder baru bernama php-jwt. Setelah itu, Anda perlu mengunduh JWT di dalam folder ini untuk menggunakan JWT . Anda dapat mengkloning JWT dari Github atau mengunduhnya melalui Komposer.
Bagaimana cara menggunakan token JWT untuk otentikasi di PHP?Gunakan JWT untuk Token Akses di PHP . Ambil dan parsing Okta JSON Web Keys (JWK) Anda, yang harus diperiksa secara berkala dan di-cache oleh aplikasi Anda Dekode token akses, yang dalam format Token Web JSON Verifikasi tanda tangan yang digunakan untuk menandatangani token akses Verifikasi klaim yang ditemukan di dalam token akses Bagaimana cara menggunakan firebase php JWT di laravel?Verifikasi Firebase auth JWT dengan PHP Laravel . Aliran keseluruhan. Aplikasi klien mengambil Firebase ID Token (JWT) dan mengirimkannya ke server backend melalui header HTTP Otorisasi. . TL;DR. . Instal paket firebase/php-jwt. . kelas FirebaseToken. . Ambil kunci publik untuk memverifikasi JWT. . Dekode dan verifikasi JWT. . Mari kita gunakan |