OpenID Connect & SSO: Satu Login untuk Semua
Memahami OIDC — extension OAuth 2.0 untuk authentication dan Single Sign-On
Tujuan Pembelajaran
- Memahami perbedaan OAuth 2.0 (authorization) vs OpenID Connect (authentication)
- Mampu mengimplementasikan OIDC login dengan ID Token
- Mengerti arsitektur SSO dan cara kerjanya
Analogi
OAuth = Kunci valet (akses mobil)
OIDC = Kartu identitas (siapa kamu)
OAuth 2.0: "Aplikasi ini boleh akses foto Google Drive kamu"
→ Authorization
OIDC: "Ini bukti bahwa kamu adalah user dengan email x@gmail.com"
→ Authentication + identity
SSO: Satu kartu identitas untuk masuk ke semua gedung (aplikasi)
OAuth = authorization. OIDC = authentication + identity. SSO = satu login untuk semua aplikasi.
Penjelasan Konsep
OpenID Connect (OIDC) adalah layer identity di atas OAuth 2.0. OAuth 2.0 hanya untuk delegated access — OIDC menambahkan authentication: membuktikan siapa user.
ID Token: JSON Web Token (JWT) yang berisi klaim tentang user (sub, email, name, picture). Berbeda dengan Access Token — ID Token adalah untuk client (memberi tahu siapa user), Access Token adalah untuk API (memberi akses).
OIDC Flow: sama dengan OAuth 2.0 Authorization Code + PKCE, tapi dengan tambahan scope=openid. Response dari token endpoint mengandung id_token selain access_token. Client memverifikasi id_token (signature, issuer, audience, expiration) untuk memastikan autentik.
SSO (Single Sign-On): User login sekali di Identity Provider (Google, Okta, Auth0) → semua aplikasi terhubung mengenali user tanpa login ulang. Arsitektur: Identity Provider sebagai central auth server. Aplikasi redirect ke IdP untuk login. Session di IdP dishare via cookie.
Multi-IdP: Banyak aplikasi support multiple IdP (Google, GitHub, Microsoft, Apple). Library seperti NextAuth.js/Polaris memudahkan ini — satu interface untuk semua provider.
Inti yang Perlu Dipahami
Bagian ini berfokus pada memahami perbedaan OAuth 2.0 (authorization) vs OpenID Connect (authentication)., mampu mengimplementasikan OIDC login dengan ID Token., dan mengerti arsitektur SSO dan cara kerjanya. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.
Saat membaca OpenID Connect & SSO, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.
Cara Membayangkannya
OAuth = authorization. OIDC = authentication + identity. SSO = satu login untuk semua aplikasi. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.
Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.
Saat Melihat Contoh Kode
Contoh kode pada chapter ini memakai bahasa typescript. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. OIDC discover via .well-known/openid-configuration. JWKS endpoint menyediakan public keys untuk verifikasi signature. JANGAN skip verifikasi — attacker bisa buat JWT palsu.
Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.
Konteks dalam Perjalanan Belajar
Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.
Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.
Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.
Contoh Kode
// Verify ID Token (JWT)
function verifyIdToken(token: string) {
// Decode tanpa verify dulu untuk lihat issuer
const decoded = JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString());
// Verifikasi dengan JWKS (JSON Web Key Set) dari issuer
const issuer = decoded.iss;
const jwks = await fetch(`${issuer}/.well-known/openid-configuration`)
.then(r => r.json())
.then(c => fetch(c.jwks_uri).then(r => r.json()));
// Verifikasi signature, issuer, audience, expiration
const verified = jwt.verify(token, jwks.keys[0], {
issuer: issuer,
audience: CLIENT_ID,
algorithms: ['RS256'],
});
return verified;
}Penjelasan Kode
Prompt AI
Setup SSO untuk 3 aplikasi dengan satu Identity Provider (bisa pakai Auth0 free tier atau Supabase Auth). Minta AI bantu konfigurasi redirect URIs dan CORS.
Pertanyaan Reflektif
Apakah aplikasi-mu support SSO? Kalau kamu punya 3 aplikasi berbeda, user harus login 3x? Atau satu login untuk semua?