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_URIdengan code
3. Frontend Callback (callback.tsx)
File: Frontend/src/hooks/callback.tsx
Flow:
userManager.signinCallback()- Parse token dari URL- Dapat user object dari SSO
- POST ke
/auth/login-ssodengan user data - Terima token aplikasi dari backend
- Save token via
login()dari AuthContext - Navigate ke home
4. Backend (auth/login-sso)
File: backend-user-service/routes/auth/route.go
Endpoint: POST /auth/login-sso
Proses:
- Terima
UserSSOobject dari frontend - Check user di database berdasarkan email
- Generate JWT token aplikasi
- Set cookie
access_token - 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
/callbackdengan componentcallback.tsx
Token Flow
-
SSO Token (dari SSO Server):
id_token- Identity token (JWT)access_token- Access token untuk SSO- Digunakan untuk verifikasi di frontend
-
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)