Skip to content

Istilah & Teknologi dalam Authentication

Sistem authentication memiliki banyak istilah dan teknologi yang perlu dipahami. Berikut penjelasan lengkapnya.


Daftar Istilah Penting

Identity & Credentials

IstilahPenjelasan
IdentityIdentitas unik seorang pengguna (bisa berupa ID, email, username).
CredentialsKredensial yang membuktikan identitas, kombinasi dari identifier + secret (misal: email + password).
PasswordRahasia yang hanya diketahui user, digunakan sebagai bukti kepemilikan identitas.
Password HashPassword yang sudah dienkripsi satu arah (bcrypt, argon2) sebelum disimpan di database.
SaltData acak yang ditambahkan ke password sebelum di-hash untuk mencegah serangan rainbow table.

Session & Token

IstilahPenjelasan
SessionData sementara di server yang menyimpan status login user. Biasanya dirujuk via cookie di browser.
Session IDIdentitas unik session yang dikirim sebagai cookie ke browser.
CookieFile kecil di browser yang menyimpan session ID atau token.
TokenString unik yang mewakili otorisasi user, dikirim di setiap request (biasanya di header Authorization).
JWT (JSON Web Token)Token yang berisi data terenkode (payload) yang bisa diverifikasi tanpa perlu database. Format: header.payload.signature.
Access TokenToken yang digunakan untuk mengakses resource (biasanya berlaku pendek: 15-60 menit).
Refresh TokenToken untuk mendapatkan access token baru tanpa login ulang (berlaku lebih lama: hari/bulan).
CSRF TokenToken anti serangan Cross-Site Request Forgery.

Authentication Flow

IstilahPenjelasan
LoginProses memasukkan credentials untuk memulai session terautentikasi.
LogoutProses mengakhiri session dan menghapus data authentication.
Register / Sign UpProses pembuatan akun baru.
Remember MeFitur agar user tetap login meskipun browser ditutup (menggunakan token di cookie).
Password ResetProses mengganti password yang lupa melalui email atau mekanisme lain.
Email VerificationVerifikasi bahwa user benar-benar memiliki email yang didaftarkan.
Rate Limiting / ThrottlingPembatasan jumlah percobaan login untuk mencegah brute force attack.
Session FixationSerangan di mana penyerang memaksa user menggunakan session ID yang sudah diketahui.

Security Concepts

IstilahPenjelasan
Brute Force AttackPercobaan login berulang dengan berbagai kombinasi password.
Brute Force ProtectionMekanisme yang memblokir user setelah beberapa kali gagal login.
MFA / 2FA (Multi-Factor Authentication)Authentication menggunakan dua atau lebih faktor (password + OTP, dll).
OTP (One-Time Password)Password sekali pakai yang dikirim via SMS/email/authenticator app.
TOTP (Time-based OTP)OTP yang berubah setiap 30-60 detik (Google Authenticator, Authy).
Biometric AuthenticationAuthentication menggunakan sidik jari, wajah, suara, atau retina.
OAuth (Open Authorization)Protokol yang memungkinkan login menggunakan akun pihak ketiga (Google, GitHub, dll).
SSO (Single Sign-On)Satu kali login bisa mengakses banyak aplikasi (contoh: login Google untuk Gmail, Drive, YouTube).
Magic LinkLink ajaib yang dikirim ke email — sekali klik langsung login tanpa password.
Passwordless AuthenticationAuthentication tanpa password (magic link, OTP, biometric).

Teknologi dalam Authentication System

Session-Based Authentication

Cara klasik dan masih paling umum untuk aplikasi web monolith.

Prinsip: Authentication state dikelola di server (stateful).

Alur Lengkap

gambar-sessionauth-laravel

Bagaimana Database Menyimpan Session?

Session disimpan di server / database, bukan di client. Berikut contoh tabel session di database:

js
TABLE: sessions
┌──────────────┬─────────────┬────────────────────┬──────────────────────┐
id (PK)      │ user_id     │ payload            │ expires_at           │
├──────────────┼─────────────┼────────────────────┼──────────────────────┤
│ abc123...42          │ {ip: ...,          │ 2025-06-01 13:00:00
│              │             │  user_agent: ...}  │                      │
│ def456...42          │ {ip: ...,          │ 2025-06-01 13:30:00
│              │             │  user_agent: ...}  │                      │
│ ghi789...17          │ {ip: ...,          │ 2025-06-01 14:00:00
│              │             │  user_agent: ...}  │                      │
└──────────────┴─────────────┴────────────────────┴──────────────────────┘

Tempat penyimpanan session bisa:

  • In-memory (RAM) — cepat, tapi hilang saat server restart ❌
  • Database relational (MySQL/PostgreSQL) — persisten ✅
  • Redis / Memcached — cepat dan persisten, paling umum di production ✅
  • File system — jarang dipakai di production

Kelebihan

  • ✅ Mudah di-invalidate (tinggal hapus session dari database → user langsung logout)
  • ✅ Aman dari token hijacking (session ID acak, tidak mengandung data user)
  • ✅ State dikelola server — lebih mudah dikontrol

Kekurangan

  • Rentan CSRF (Cross-Site Request Forgery) — karena cookie otomatis terkirim, penyerang bisa memanfaatkannya
  • Scaling sulit — server harus tetap menyimpan session data. Di cloud terdistribusi, session jadi bottleneck. Solusi: sticky session atau Redis terpusat
  • Memory server terbebani — makin banyak user aktif, makin besar session data yang harus dikelola

Tools Populer

Laravel Auth, Express Session, Django Session, Spring Security, ASP.NET Core Identity.


Token-Based Authentication

Solusi untuk mengatasi masalah scaling pada session-based auth. Sangat cocok untuk API, SPA, dan mobile apps.

Prinsip: Authentication state dikelola di client (stateless).

Alur Lengkap (dengan JWT)

gambar-token-auth-laravel

Kenapa JWT Tidak Perlu Database?

JWT berisi semua informasi yang dibutuhkan di dalam token itu sendiri:

js
JWT = base64(header) + "." + base64(payload) + "." + signature

Contoh payload (didecode):

json
{
  "sub": "42",            user ID
  "name": "John Doe",
  "role": "admin",
  "iat": 1717200000,      issued at
  "exp": 1717203600 expires (60 menit)
}

Server cukup memverifikasi signature menggunakan private key / secret. Jika signature valid, data di payload bisa dipercaya — tanpa perlu query database sama sekali. Ini yang membuat JWT sangat efisien untuk distributed systems.

Jenis Token

JenisVerifikasiDatabase?Contoh
JWTSignature (HS256/RS256)❌ Tidak perlueyJhbGci...
Opaque TokenAcak, harus dicocokkan✅ Wajibsk_live_3f8a...
Sanctum TokenOpaque (milik Laravel)✅ Dicocokkan di DB1|abc123...
Refresh TokenOpaque / JWT✅ Biasanya disimpanrft_xyz...

Kelebihan

  • Scaling effortless — server tidak perlu menyimpan state, cocok untuk cloud terdistribusi
  • Tidak ada CSRF — token dikirim manual via header, bukan otomatis seperti cookie
  • Lebih ringan untuk server — tidak perlu query database di setiap request
  • Cocok untuk SPA / Mobile — token bisa disimpan dan dikirim dari mana saja

Kekurangan

  • Token bisa di-hijack — jika token dicuri, penyerang bisa akses sampai token expired
  • Sulit di-invalidate — tidak bisa "logout paksa" sebelum token expired (kecuali pakai blocklist/deny list)
  • Payload bisa dibaca — isi JWT hanya di-sign, bukan di-encrypt. Jangan simpan data sensitif di payload!
  • Tidak cocok untuk background auth — jika ada proses server-side yang butuh akses user (cron job, queue), JWT yang sudah expire jadi masalah

Kapan Pake Yang Mana?

SkenarioPilih
Web monolith tradisionalSession-Based
API untuk SPA / MobileToken-Based
Distributed cloud / microservicesToken-Based (JWT)
Butuh kontrol penuh (force logout cepat)Session-Based
Butuh scalability tinggiToken-Based

OAuth 2.0 & SSO

Protokol standar industri untuk delegasi akses.

User ──> Aplikasi ──> Google/GitHub

                  ├── "Bolehkah user ini login?"
                  ├── User menyetujui
                  └── Dapat token akses

Penyedia OAuth populer: Google, GitHub, Facebook, Apple, Microsoft.

Passwordless Authentication

Autentikasi tanpa password tradisional:

  • Magic Link: klik link di email → langsung login.
  • OTP: kode sekali pakai via SMS/email.
  • WebAuthn / Passkeys: standar baru dari FIDO Alliance menggunakan biometric atau hardware token.
  • Push Notification: notifikasi ke HP "Apakah ini kamu?" → tap approve.

Tools & Library Authentication Populer (2025)

Berikut teknologi authentication yang banyak digunakan di ekosistem web development saat ini:

🔷 Laravel Ecosystem

ToolDeskripsi
Laravel BreezeStarter kit minimalis untuk authentication Laravel (Blade, Livewire, React, Vue). Ringan dan sederhana.
Laravel JetstreamStarter kit lebih lengkap dengan fitur team management, 2FA, API tokens via Sanctum.
Laravel SanctumPaket authentication hybrid untuk Laravel — otomatis pakai cookie untuk web dan token untuk API. Recommended untuk API Laravel.
Laravel PassportImplementasi OAuth2 penuh untuk Laravel. Cocok jika benar-benar butuh OAuth2.
Laravel FortifyHeadless authentication backend — menyediakan route & controller auth tanpa UI. Cocok dipasangkan dengan frontend SPA.
Laravel SocialiteOAuth login via provider eksternal (Google, GitHub, Facebook, Twitter, dll).

🔷 PHP / Laravel (Pihak Ketiga)

ToolDeskripsi
Laravel Permission (Spatie)Manajemen role & permission untuk Laravel (authorization, bukan authentication langsung).
Sentinel (Cartalyst)Authentication & authorization framework untuk PHP. Cocok untuk legacy project atau non-Laravel.

🔷 Multi-Platform / Lintas Framework

ToolDeskripsi
Better AuthLibrary authentication modern untuk berbagai framework (termasuk Laravel). Mendukung passwordless, MFA, session management, webhooks, dan banyak fitur siap pakai. Cocok jika ingin solusi all-in-one di luar ekosistem Laravel murni.
Auth0Platform authentication cloud (SaaS). Mendukung login sosial, MFA, passwordless, SSO, user management dashboards. Tinggal integrasi API, urusan security dikelola Auth0.
ClerkAuthentication & user management modern. Fokus pada developer experience, UI komponen siap pakai untuk React, Next.js, Vue.
Supabase AuthAuthentication bawaan Supabase (Firebase alternatif). Mendukung email/password, OAuth, magic link, MFA. Terintegrasi dengan database PostgreSQL.
Firebase AuthenticationAuthentication dari Google. Gratis untuk skala kecil-menengah. Mendukung email, OAuth, phone auth, anonymous auth.
NextAuth.js (Auth.js)Authentication untuk Next.js dan framework modern lainnya. Support OAuth, credentials, email, database adapters.
LuciaLibrary authentication lightweight untuk JavaScript/TypeScript. Sederhana dan fleksibel, bisa dipakai dengan berbagai database.
KindePlatform auth modern dengan fokus kemudahan integrasi. Menyediakan pre-built login pages.

🔷 .NET Ecosystem

ToolDeskripsi
ASP.NET Core IdentityAuthentication & authorization bawaan .NET. Mendukung login, register, role management, 2FA, external login. Lengkap dan terintegrasi dengan Entity Framework.
Duende IdentityServerImplementasi OAuth 2.0 & OpenID Connect untuk .NET. Standar industri untuk SSO di ekosistem .NET.

🔷 Python Ecosystem

ToolDeskripsi
Django AuthenticationSistem auth bawaan Django — lengkap dengan user model, session, permissions, admin panel.
Flask-LoginSession-based authentication untuk Flask.
FastAPI UsersAuthentication & user management untuk FastAPI. Support SQLAlchemy, MongoDB, OAuth, JWT.

🔷 Node.js Ecosystem

ToolDeskripsi
Passport.jsMiddleware authentication modular untuk Express. Ratusan strategi (local, OAuth, JWT, dll).
JWT (jsonwebtoken)Library untuk membuat & memverifikasi JWT. Bukan auth lengkap, tapi komponen penting.
bcryptLibrary untuk hashing password (di semua bahasa).

🔷 Go Ecosystem

ToolDeskripsi
GothOAuth provider untuk Go. Multi-strategy (sama seperti Passport.js).
CasbinAuthorization library yang bisa dipasangkan dengan authentication system manapun.

🔷 Java Ecosystem

ToolDeskripsi
Spring SecurityFramework authentication & authorization paling populer di Java. Mendukung LDAP, OAuth2, JWT, form login, SSO.
KeycloakPlatform auth open-source lengkap (SSO, OAuth2, SAML, user federation). Bisa di-self-host atau cloud.

Tips Memilih Teknologi Authentication

  1. Aplikasi Laravel monolith → pakai Breeze atau Jetstream (built-in auth sudah cukup).
  2. Laravel + API/SPA → pakai Sanctum.
  3. Butuh OAuth2 penuh (third-party client) → pakai Passport.
  4. Butuh cloud solution (enggan urus infrastruktur auth) → Auth0, Clerk, Supabase Auth, atau Firebase Auth.
  5. Aplikasi non-Laravel yang butuh solusi all-in-one → Better Auth, Auth.js, atau Lucia.
  6. Passwordless / modern authMagic link, OTP, atau WebAuthn/Passkeys.
  7. Multi-platform / ingin fleksibelBetter Auth bisa jadi pilihan lintas framework.

Pada akhirnya, pilihan teknologi authentication tergantung pada kebutuhan: seberapa besar skala, apakah butuh OAuth, berapa banyak developer, dan apakah ingin manage sendiri atau pakai SaaS.