Skip to main content

Diagram Mekanisme Login via SSO

Flow Diagram

Detail Komponen

1. Frontend (oidc.ts)

File: Frontend/src/hooks/oidc.ts

Config OIDC:

const oidcConfig = {
authority: VITE_OIDC_AUTHORITY,
client_id: VITE_OIDC_CLIENT_ID,
redirect_uri: VITE_OIDC_REDIRECT_URI, // ← Output akhir redirect ke sini
response_type: VITE_OIDC_RESPONSE_TYPE,
scope: VITE_OIDC_SCOPE,
post_logout_redirect_uri: VITE_OIDC_POST_LOGOUT_REDIRECT_URI,
USERSTORE: new WebStorageStateStore({ store: window.localStorage }),
};

Fungsi Login:

export function LoginOIDC() {
userManager.signinRedirect(); // Redirect ke SSO
}

2. SSO Server (OIDC Provider)

  • User melakukan login dengan credentials
  • SSO memvalidasi user
  • Generate authorization code
  • Redirect kembali ke VITE_OIDC_REDIRECT_URI dengan code

3. Frontend Callback (callback.tsx)

File: Frontend/src/hooks/callback.tsx

Flow:

  1. userManager.signinCallback() - Parse token dari URL
  2. Dapat user object dari SSO
  3. POST ke /auth/login-sso dengan user data
  4. Terima token aplikasi dari backend
  5. Save token via login() dari AuthContext
  6. Navigate ke home

4. Backend (auth/login-sso)

File: backend-user-service/routes/auth/route.go

Endpoint: POST /auth/login-sso

Proses:

  1. Terima UserSSO object dari frontend
  2. Check user di database berdasarkan email
  3. Generate JWT token aplikasi
  4. Set cookie access_token
  5. Return token + user data

Response:

{
"token": "jwt_token_here",
"user_id": "uuid",
"name": "User Name",
"email": "user@example.com",
"user_groups": [...],
"attributes": [...]
}

Environment Variables

VITE_OIDC_REDIRECT_URI adalah URL callback yang:

  • Dikonfigurasi di frontend .env
  • Contoh: https://54.199.27.29/callback
  • SSO akan redirect ke URL ini setelah login berhasil
  • Frontend akan handle di route /callback dengan component callback.tsx

Token Flow

  1. SSO Token (dari SSO Server):

    • id_token - Identity token (JWT)
    • access_token - Access token untuk SSO
    • Digunakan untuk verifikasi di frontend
  2. Application Token (dari Backend):

    • JWT token custom aplikasi
    • Berisi user_id, email, groups, attributes
    • Disimpan di:
      • Cookie (HTTPOnly)
      • localStorage (via AuthContext)
    • Digunakan untuk semua request ke backend

Security Notes

  • Frontend tidak langsung menyimpan SSO token
  • SSO token hanya digunakan untuk exchange dengan application token
  • Application token yang digunakan untuk autentikasi selanjutnya
  • Cookie HTTPOnly mencegah XSS attacks
  • Token expire 24 jam (backend) dan 30 hari (cookie)