Authorization dan Authentication pada Python Flask

Nissa

Sosial Media


0 orang menyukai ini
Suka

Summary

Dalam pengerjaan proyek, kita dapat membagi sistem menjadi dua, yaitu Front-end untuk menampilkan informasi dan berinteraksi langsung dengan user dan Back-end untuk memanipulasi dan menyediakan data sesuai kebutuhan. Namun, tidak semua data boleh diakses oleh semua pengguna. Beberapa data yang sifatnya rahasia untuk pengguna tertentu, tentunya memerlukan otorisasi dan otentikasi. Pada project yang menggunakan Python Flask, dapat digunakan package Flask-JWT-Extended untuk membantu pertukaran informasi yang lebih aman dan menyesuaikan hak pengguna.

Description

JSON Web Token

JSON Web Token, yang berarti token ini menggunakan JSON (Javascript Object Notation) berbentuk string panjang yang sangat random, lalu token ini memungkinkan kita untuk mengirimkan data yang dapat diverifikasi oleh dua pihak atau lebih. Ketika pengguna melakukan login, akan dihasilkan suatu token ketika loginnya valid dan berhasil. Token tersebut akan digunakan untuk mengidentifikasi pengguna yang sudah melakukan login.

Flask-JWT-Extended

Flask-JWT-Extended adalah sebuah package yang menyediakan fungsi untuk mendukung autentikasi pengguna. Package tersebut juga bisa dimanipulasi untuk menyimpan informasi pengguna dan membantu proses otorisasi.

Penggunaan Flask-JWT-Extended untuk Authentication dan Authorization

 

1. Instalasi

Jalankan command berikut pada project Python Flask anda untuk menginstall package

 pip install Flask-JWT-Extended 

2. Generate Token

1. expires = timedelta(days=365)
2. exp_token = datetime.now() + timedelta(days=365)
3. access_token = create_access_token(current_user, fresh=True, expires_delta=expires)
4. data = {**json_data[0], 'access_token': access_token, 'expires': exp_token }

Empat baris di atas adalah proses untuk men-generate akses token untuk pengguna yang sudah berhasil login. Pada baris 1, kita dapat menentukan kapan token pengguna expired. Misalnya, setelah 365 hari, token akses pengguna otomatis tidak valid dan pengguna harus melakukan login ulang, kemudian token baru akan ter-generate. Pada baris 2, kita akan menghasilkan waktu expired pada 365 hari setelah hari ini. Pada baris 3, kita dapat men-generate token akses menggunakan fungsi create_access_token. Fungsi tersebut akan menerima argumen current_user yang berupa data pengguna yang saat ini login serta lama token akan valid. Kemudian, pada baris 4, kita bisa menampilkan informasi token dan data pengguna dalam suatu variabel untuk kemudian diolah kembali atau dikembalikan sebagai response.

3. Authorization

Untuk memudahkan otorisasi, kita bisa membuat suatu decorator agar fungsi otorisasi bisa digunakan di seluruh fungsi yang sekiranya memerlukan otorisasi tersebut. 

1. def is_staff():
2.   def decorator(f):
3.      @wraps(f)
4.       def wrapped(*args, **kwargs):
5.           current_user = get_jwt_identity()
6.           if (current_user['role'] != 'STAFF'):
7.               return response.unauthorizedRequest([], "Unauthorized Access!")
8.           ret = f(*args, **kwargs)
9.           return ret
10.       return wrapped
11.   return decorator

11 baris kode di atas adalah fungsi decorator bernama is_staff yang berfungsi untuk mengecek apakah pengguna yang saat ini login memiliki role tertentu. Pada baris 5, kita bisa mengambil identitas user saat ini melalui fungsi get_jwt_identity. Lalu, kita bisa melihat apakah role yang dimiliki user tersebut adalah STAFF. Jika bukan, maka decorator tersebut akan mengembalikan response unauthorized request.

Informasi Course Terkait
  Kategori: Web Programming
  Course: Mikrokontroler: Dasar-Dasar Pemrograman Python