DEV Community

Nandan Ramdani
Nandan Ramdani

Posted on

Memahami Jenis-Jenis Metode Autentikasi dan Alur (Flow)-nya

Autentikasi merupakan fondasi utama dalam sistem keamanan aplikasi modern. Tanpa mekanisme autentikasi yang baik, siapa pun bisa mengakses data atau layanan tanpa izin. Namun, tidak semua metode autentikasi diciptakan sama β€” masing-masing memiliki karakteristik, tingkat keamanan, dan skenario penggunaan yang berbeda.

Dalam artikel ini, kita akan membahas beberapa metode autentikasi paling umum beserta alur (flow) kerjanya, mulai dari yang sederhana hingga yang digunakan di sistem enterprise berskala besar.


1. Basic Authentication

πŸ”Ž Deskripsi

Basic Auth adalah metode autentikasi paling sederhana di mana client mengirimkan pasangan username dan password dalam header HTTP. Biasanya dikodekan dalam format Base64.

βš™οΈ Flow

  1. Client mengirimkan header:
   Authorization: Basic <base64(username:password)>
Enter fullscreen mode Exit fullscreen mode
  1. Server memverifikasi kredensial.
  2. Jika valid, server memberikan akses ke resource.

⚠️ Kelemahan

Metode ini tidak aman tanpa HTTPS karena kredensial dikirim setiap kali request. Biasanya hanya digunakan pada sistem internal atau untuk testing.


2. Session-Based Authentication

πŸ”Ž Deskripsi

Metode klasik yang masih banyak digunakan di aplikasi web tradisional. Server menyimpan session setelah user berhasil login.

βš™οΈ Flow

  1. User login dengan username dan password.
  2. Server membuat session ID dan menyimpannya di memori atau database.
  3. Session ID dikirim ke client melalui cookie.
  4. Client otomatis mengirim cookie tersebut pada setiap request berikutnya.

βœ… Kelebihan

  • Mudah dikontrol oleh server (misalnya untuk logout atau expired session).
  • Cocok untuk aplikasi monolitik berbasis server-rendered pages.

⚠️ Kekurangan

  • Tidak efisien untuk sistem berskala besar (karena server harus menyimpan session).
  • Tidak ideal untuk API atau aplikasi terdistribusi.

3. Token-Based Authentication (JWT)

πŸ”Ž Deskripsi

Berbeda dengan session, metode ini tidak menyimpan data di server. Setelah login, server mengembalikan token (biasanya JWT β€” JSON Web Token) yang berisi informasi user dan waktu kedaluwarsa.

βš™οΈ Flow

  1. Client login dan mengirim kredensial.
  2. Server memverifikasi, lalu mengembalikan JWT.
  3. Client menyimpan token (biasanya di localStorage atau cookie).
  4. Setiap request berikutnya dikirim dengan header:
   Authorization: Bearer <token>
Enter fullscreen mode Exit fullscreen mode
  1. Server memverifikasi token tanpa perlu menyimpan session.

βœ… Kelebihan

  • Bersifat stateless, cocok untuk API modern dan aplikasi SPA (Single Page Application).
  • Skalabel dan efisien.

⚠️ Kekurangan

  • Token tidak bisa dicabut sebelum masa berlakunya habis (kecuali ada mekanisme blacklist).
  • Keamanan sangat bergantung pada cara penyimpanan token di sisi client.

4. API Key Authentication

πŸ”Ž Deskripsi

Metode autentikasi sederhana berbasis kunci unik yang diberikan kepada setiap client atau aplikasi.

βš™οΈ Flow

  1. Client menyertakan API key di header atau query string:
   Authorization: ApiKey <key>
Enter fullscreen mode Exit fullscreen mode
  1. Server memverifikasi key dan memberikan akses.

βœ… Kelebihan

  • Implementasi mudah dan cepat.
  • Cocok untuk komunikasi antar layanan (machine-to-machine).

⚠️ Kekurangan

  • Tidak mengidentifikasi user, hanya aplikasi.
  • Jika key bocor, siapa pun bisa mengakses API.

5. OAuth 2.0

πŸ”Ž Deskripsi

OAuth 2.0 adalah protokol standar industri untuk delegated authorization β€” artinya pengguna dapat memberi izin pada aplikasi pihak ketiga tanpa harus membagikan kredensial.

βš™οΈ Flow (Authorization Code Grant)

  1. Aplikasi mengarahkan user ke halaman login penyedia otorisasi (misalnya Google).
  2. User login dan memberikan izin.
  3. Authorization server mengembalikan authorization code.
  4. Aplikasi menukar code tersebut dengan access token.
  5. Token digunakan untuk mengakses resource API.

βœ… Kelebihan

  • Aman untuk login pihak ketiga.
  • Tidak ada pertukaran password antar sistem.

⚠️ Kekurangan

  • Implementasinya cukup kompleks.
  • Perlu pengamanan ekstra terhadap redirect URI dan token leakage.

6. OpenID Connect (OIDC)

πŸ”Ž Deskripsi

OpenID Connect adalah lapisan identitas yang dibangun di atas OAuth 2.0. Selain access token, OIDC juga menyediakan ID Token yang berisi informasi user.

βš™οΈ Flow

Hampir sama dengan OAuth 2.0, tetapi authorization server juga mengirimkan ID Token dalam format JWT.

βœ… Kelebihan

  • Mendukung Single Sign-On (SSO).
  • Banyak digunakan di sistem enterprise (misalnya Google Sign-In, Azure AD, Okta).

7. Mutual TLS (mTLS)

πŸ”Ž Deskripsi

Metode autentikasi berbasis sertifikat di mana client dan server saling memverifikasi identitas menggunakan sertifikat TLS.

βš™οΈ Flow

  1. Server mengirim sertifikat ke client.
  2. Client juga mengirim sertifikat balik ke server.
  3. Kedua pihak memverifikasi sertifikat masing-masing.
  4. Jika valid, koneksi aman dibentuk.

βœ… Kelebihan

  • Keamanan sangat tinggi.
  • Cocok untuk komunikasi antar microservices di lingkungan enterprise.

⚠️ Kekurangan

  • Manajemen sertifikat kompleks dan sulit diotomasi.
  • Tidak cocok untuk aplikasi publik biasa.

πŸ“Š Perbandingan Singkat

Metode Cocok Untuk Keamanan Sifat Kompleksitas
Basic Auth API internal, testing Rendah Stateless Rendah
Session Web klasik Sedang Stateful Rendah
JWT SPA, Mobile API Tinggi Stateless Sedang
API Key Machine-to-machine Sedang Stateless Rendah
OAuth2 / OIDC SSO, Third-party login Tinggi Stateless Tinggi
mTLS Microservices Sangat tinggi Stateless Tinggi

🧭 Kesimpulan

Tidak ada satu metode autentikasi yang cocok untuk semua kasus.

  • Untuk aplikasi web klasik, session-based auth masih relevan.
  • Untuk API dan SPA, JWT lebih efisien dan skalabel.
  • Untuk integrasi pihak ketiga atau SSO, OAuth2/OIDC menjadi pilihan terbaik.
  • Dan untuk komunikasi antar layanan sensitif, mTLS memberikan tingkat keamanan tertinggi.

Pada akhirnya, pemilihan metode autentikasi harus mempertimbangkan tingkat keamanan yang dibutuhkan, kompleksitas sistem, serta konteks penggunaan.

Top comments (0)