Single Sign-On & SAML — Auth

SSO (Single Sign-On) memungkinkan user login sekali dan otomatis terautentikasi di banyak aplikasi. Ini standar di lingkungan enterprise. Konsep utama: IdP (Ide

SSO (Single Sign-On) memungkinkan user login sekali dan otomatis terautentikasi di banyak aplikasi. Ini standar di lingkungan enterprise.

Konsep utama:

Protokol SSO populer:

  1. SAML 2.0 — standar enterprise berbasis XML, dipakai aplikasi legacy dan korporat besar
  2. OIDC (OpenID Connect) — modern, berbasis JSON/JWT, dipakai aplikasi web/mobile
  3. CAS — dipakai banyak universitas

Alur SAML 2.0 (SP-Initiated):

1. User buka app.perusahaan.com/dashboard (SP)
2. SP: "Kamu belum login, redirect ke IdP"
   → Redirect ke idp.perusahaan.com/sso?SAMLRequest=...
3. IdP tampilkan halaman login
4. User login dengan kredensial perusahaan
5. IdP buat SAML Assertion (XML, ditandatangani digital):
   <Assertion>
     <Subject>[email protected]</Subject>
     <Attribute name="role">editor</Attribute>
     <Attribute name="department">engineering</Attribute>
     <Conditions NotBefore="..." NotOnOrAfter="..."/>
   </Assertion>
6. IdP POST assertion ke SP (ACS URL): app.perusahaan.com/saml/callback
7. SP validasi signature assertion
8. SP buat session lokal → user masuk!

User buka crm.perusahaan.com (SP kedua):
9. SP cek: user sudah login di IdP? Ya!
10. IdP kirim assertion baru ke CRM → user langsung masuk tanpa login ulang

Implementasi SAML di Node.js:

const saml = require("@node-saml/node-saml");

const samlConfig = {
  entryPoint: "https://idp.example.com/sso",
  issuer: "https://myapp.example.com",
  cert: "CERTIFICATE_FROM_IDP",
  callbackUrl: "https://myapp.example.com/saml/callback"
};

// Redirect ke IdP
app.get("/login/saml", (req, res) => {
  saml.getAuthorizeUrlAsync(samlConfig).then((url) => res.redirect(url));
});

// Callback dari IdP
app.post("/saml/callback", async (req, res) => {
  const { profile } = await saml.validatePostResponseAsync(samlConfig, req.body);
  // profile.nameID = email user
  // profile berisi semua attribute dari assertion
  req.session.userId = profile.nameID;
  res.redirect("/dashboard");
});

SAML vs OIDC:

Aspek SAML 2.0 OIDC
Format XML JSON/JWT
Usia 2005 2014
Kompleksitas Tinggi Sederhana
Mobile support Buruk Sangat baik
Enterprise adoption Dominan Meningkat

Kapan pakai SSO: sistem enterprise dengan banyak internal tools, onboarding/offboarding karyawan (satu tempat kelola akses), compliance dan audit terpusat.