Advertisement
  1. Code
  2. Python

Otentikasi JWT di Django

by
Read Time:9 minsLanguages:

Indonesian (Bahasa Indonesia) translation by Saipul Hidayat (you can also view the original English article)

Tutorial ini akan memberikan pengenalan untuk JSON Web Token

Apa itu JWT?

JWT adalah string JSON encode yang melewati header untuk authenticate requests Ini berarti server tidak perlu query database setiap kali untuk mengambil user yang terkait dengan token yang diberikan.

Bagaimana Cara Kerja JSON Web Tokens

Ketika pengguna berhasil masuk menggunakan kredensial mereka, Token Web JSON diperoleh dan disimpan di penyimpanan lokal. Kapanpun pengguna ingin mengakses URL yang dilindungi, token dikirim di header permintaan. Server kemudian memeriksa JWT yang valid di header Otorisasi, dan jika ditemukan, pengguna akan diizinkan mengakses.

sebuah tipikal header content akan terlihat seperti ini :

Otorisasi: Pembawa eyJhbGciOiJIUzI1NiIsI

Berikut adalah diagram yang menunjukkan proses ini:

How JSON Web Tokens WorkHow JSON Web Tokens WorkHow JSON Web Tokens Work

Konsep otentikasi dan otorisasi

Otentikasi adalah proses identifikasi pengguna masuk log, sementara otorisasi adalah proses identifikasi jika pengguna tertentu memiliki hak untuk mengakses sumber daya web.

API Example

Dalam tutorial ini, kita akan membangun sistem otentikasi pengguna sederhana di Django menggunakan JWT sebagai mekanisme otentikasi.

Requirements

  • Django
  • Python

Mari kita mulai.

Buat direktori tempat Anda akan menyimpan proyek Anda dan juga lingkungan virtual untuk menginstal dependensi proyek.

Aktifkan virtual environment:

Membuat proyek Django.

Instal DRF dan django-rest-framework-jwt menggunakan pip.

Mari lanjutkan dan tambahkan DRF ke daftar aplikasi yang terinstal di file settings.py.

Konfigurasikan Pengaturan JWT

Untuk menggunakan JWT, kita perlu mengkonfigurasi django-rest-framework permissions untuk menerima JSON Web Tokens.

Dalam file settings.py, tambahkan konfigurasi berikut:

Menciptakan sebuah aplikasi baru yang disebut pengguna yang akan menangani otentikasi pengguna dan manajemen.

Tambahkan pengguna aplikasi ke daftar aplikasi diinstal dalam settings.py file.

Menyiapkan Database

Kita akan menggunakan PostgreSQL database karena lebih stabil dan kuat.

Buat database auth dan tetapkan pengguna.

Beralih ke account Postgres pada mesin Anda dengan mengetikkan:

Akses Postgres prompt dan membuat database:

Buat peranan:

Memberikan akses database pengguna:

Instal paket psycopg2, yang akan memungkinkan kita untuk menggunakan database kita mengkonfigurasi:

Edit database SQLite yang saat ini terkonfigurasi dan gunakan database Postgres.

Membuat model

Django datang dengan built-in otentikasi sistem yang sangat rumit, tapi kadang-kadang kita perlu membuat penyesuaian, dan dengan demikian kita perlu menciptakan sistem otentikasi pengguna. Model user kami akan mewarisi dari kelas AbstractBaseUser disediakan oleh django.contrib.auth.models.

Dalam users/models.py, kita mulai dengan membuat model User untuk menyimpan user detail.

REQUIRED_FIELDS berisi semua kolom yang diperlukan pengguna model, kecuali kolom nama pengguna dan sandi, bidang ini akan selalu diminta untuk.

UserManager adalah kelas yang mendefinisikan metode create_user dan createsuperuser. Kelas ini harus datang sebelum kelas AbstractBaseUser kita didefinisikan di atas. Mari kita pergi ke depan dan menentukan itu.

Migrasi

Migrasi menyediakan cara memperbarui skema database Anda setiap kali model Anda berubah, tanpa kehilangan data.

Membuat migrasi awal untuk model pengguna kami, dan sinkronisasi database untuk pertama kalinya.

Menciptakan Superuser

Buat superuser dengan menjalankan perintah berikut:

Membuat pengguna baru

Mari kita membuat endpoint untuk memungkinkan pendaftaran pengguna baru. Kita akan mulai dengan serializing bidang model pengguna. Serializers menyediakan cara untuk mengubah data menjadi bentuk yang lebih mudah untuk memahami, seperti JSON atau XML. Deserialization melakukan sebaliknya, sehingga adalah mengkonversi data menjadi bentuk yang dapat disimpan ke database.

Buat users/serializers.py dan tambahkan kode berikut.

CreateUserAPIView

Selanjutnya, kami ingin membuat tampilan sehingga klien akan memiliki URL untuk membuat pengguna baru.

Di users.views.py, tambahkan yang berikut:

Kami menetapkan permission_classes ke (AllowAny,) untuk mengizinkan setiap pengguna (diotentikasi atau tidak) untuk mengakses URL ini.

Mengkonfigurasi URL

Buat file users/urls.py dan tambahkan URL untuk mencocokkan tampilan yang kami buat. Juga tambahkan kode berikut.

Kita juga perlu mengimpor URL dari aplikasi pengguna ke file django_auth/urls.py utama. Jadi lakukanlah. Kami menggunakan fungsi include di sini, jadi jangan lupa untuk mengimpornya.

Sekarang setelah selesai membuat titik akhir, mari lakukan tes dan lihat apakah kita berada di jalur yang benar. Kami akan menggunakan Postman untuk melakukan tes. Jika Anda tidak akrab dengan Postman, itu adalah alat yang menyajikan GUI yang ramah untuk membangun permintaan dan membaca tanggapan.

Configuring URLsConfiguring URLsConfiguring URLs

Seperti yang Anda lihat di atas, titik akhir berfungsi seperti yang diharapkan.

Mengautentikasi Pengguna

Kami akan menggunakan modul Django-REST Framework JWT Python yang kami pasang di awal tutorial ini. Ia menambahkan dukungan otentikasi JWT untuk aplikasi Django Rest Framework.

Tapi pertama-tama, mari kita mendefinisikan beberapa parameter konfigurasi untuk token kita dan bagaimana mereka dihasilkan dalam file settings.py.

  • JWT_VERIFY: Ini akan meningkatkan jwt.DecodeError jika rahasianya salah.
  • JWT_VERIFY_EXPIRATION: Menetapkan masa berlaku ke True, yang berarti Token akan kedaluwarsa setelah jangka waktu tertentu. Waktu default adalah lima menit.
  • JWT_AUTH_HEADER_PREFIX: Awalan nama header otorisasi yang diperlukan untuk dikirim bersama dengan token. Kami telah mengaturnya sebagai Bearer, dan defaultnya adalah JWT.

Di users/views.py, tambahkan kode berikut.

Dalam kode di atas, tampilan login mengambil nama user dan kata sandi sebagai input, dan kemudian membuat token dengan informasi user yang sesuai dengan kredensial yang diteruskan sebagai payload dan mengembalikannya ke browser. Rincian user lainnya seperti nama juga dikembalikan ke browser bersama dengan token. Token ini akan digunakan untuk mengautentikasi permintaan di masa mendatang.

Kelas izin ditetapkan untuk allowAny karena siapa pun dapat mengakses titik akhir ini.

Kami juga menyimpan waktu login terakhir pengguna dengan kode ini.

Setiap kali pengguna ingin membuat permintaan API, mereka harus mengirim token di Auth Header untuk mengautentikasi permintaan tersebut.

Mari kita uji titik akhir ini dengan Postman. Buka Postman dan gunakan permintaan untuk mengautentikasi dengan salah satu pengguna yang Anda buat sebelumnya. Jika upaya masuk berhasil, respons akan terlihat seperti ini:

A sample responseA sample responseA sample response

Mengambil dan Memperbarui Users

Sejauh ini, user dapat register dan mengautentikasi sendiri. Namun, mereka juga membutuhkan cara untuk mengambil dan memperbarui informasi mereka. Mari terapkan ini.

Di users.views.py, tambahkan kode berikut.

Kami pertama mendefinisikan kelas permission dan mengatur ke IsAuthenticated karena ini adalah URL yang dilindungi dan hanya user yang diautentikasi yang dapat mengaksesnya.

Kami kemudian menentukan metode get untuk mengambil detail pengguna. Setelah mengambil detail pengguna, pengguna yang diautentikasi kemudian akan memperbarui detailnya sesuai keinginan.

Perbarui URL Anda untuk menentukan titik akhir sebagai berikut.

Agar permintaan berhasil, header harus berisi token JWT seperti yang ditunjukkan di bawah ini.

Headers with the JWT TokenHeaders with the JWT TokenHeaders with the JWT Token

Jika Anda mencoba untuk meminta sumber daya tanpa header otentikasi, Anda akan mendapatkan kesalahan berikut.

An example errorAn example errorAn example error

Jika user tetap berada di luar waktu yang ditentukan dalam JWT_EXPIRATION_DELTA tanpa membuat permintaan, token akan kedaluwarsa dan mereka harus meminta token lain. Ini juga ditunjukkan di bawah ini.

JWT_EXPIRATION_DELTA ExampleJWT_EXPIRATION_DELTA ExampleJWT_EXPIRATION_DELTA Example

Kesimpulan

Tutorial ini telah mencakup apa yang diperlukan untuk berhasil membangun sistem otentikasi back-end yang solid dengan JSON Web Tokens.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.