HeaderRight Teknologi Nalar

Jumat, 02 Januari 2026

Dari Token ke Kendali Akses: Authorization & RBAC di REST API Python

Dari Token ke Kendali Akses: Authorization & RBAC di REST API Python
Authentication dan JWT di REST API Python
Dari Login Biasa ke Sistem Backend yang Aman & Profesional

Authorization & RBAC di REST API Python: Mengontrol Akses Setelah Authentication

Jika pada artikel sebelumnya kita membahas Authentication & JWT di REST API Python, maka tahap berikutnya adalah memastikan bahwa tidak semua user memiliki hak yang sama. Inilah inti dari Authorization dan Role-Based Access Control (RBAC).

Artikel ini adalah lanjutan dari seri backend Python di Teknologi Nalar, yang dimulai dari:


Authentication vs Authorization

Banyak developer pemula mencampuradukkan authentication dan authorization. Padahal keduanya memiliki peran berbeda:

KonsepFungsi
AuthenticationSiapa Anda?
AuthorizationApa yang boleh Anda lakukan?

JWT hanya menjawab siapa user. RBAC menjawab apa hak akses user tersebut.


Apa Itu RBAC (Role-Based Access Control)?

RBAC adalah pendekatan keamanan yang mengelompokkan hak akses berdasarkan role. Pendekatan ini direkomendasikan dalam standar keamanan modern seperti OWASP.

Contoh role umum:

  • admin → akses penuh
  • editor → kelola konten
  • user → akses terbatas

Menyimpan Role di JWT

JWT memungkinkan kita menyimpan klaim tambahan seperti role. Menggunakan Flask-JWT-Extended, kita dapat menambahkan role saat login.

access_token = create_access_token(
    identity=user.id,
    additional_claims={"role": user.role}
)

Struktur JWT ini sesuai dengan standar RFC 7519.


Membatasi Akses Endpoint Berdasarkan Role

Authorization yang baik berarti backend menolak akses sebelum logic bisnis dijalankan.

from flask_jwt_extended import get_jwt

@app.route('/admin/data')
@jwt_required()
def admin_data():
    claims = get_jwt()
    if claims["role"] != "admin":
        return {"msg": "Forbidden"}, 403
    return {"data": "Admin Only"}

Penggunaan status code 403 Forbidden sesuai dengan standar HTTP Status Code.


Membuat Decorator RBAC agar Kode Bersih

Untuk aplikasi skala menengah ke atas, RBAC sebaiknya dibuat reusable.

def role_required(role):
    def wrapper(fn):
        @wraps(fn)
        def decorator(*args, **kwargs):
            claims = get_jwt()
            if claims.get("role") != role:
                return {"msg": "Access denied"}, 403
            return fn(*args, **kwargs)
        return decorator
    return wrapper

Pendekatan ini menjaga arsitektur backend tetap bersih dan terukur.


Kesalahan Umum dalam Authorization

  • Mengandalkan frontend untuk kontrol akses
  • Tidak menggunakan HTTP status code yang benar
  • Role ditentukan di client

Semua validasi wajib terjadi di backend.


RBAC sebagai Pondasi Sistem Profesional

Dengan menggabungkan:

Anda tidak lagi sekadar belajar Python, tetapi membangun sistem backend siap produksi.

🚀 Lanjutan Berikutnya

Artikel selanjutnya akan membahas: Rate Limiting, Permission, dan API Security Lanjutan untuk REST API Python.

Tidak ada komentar:

Posting Komentar