CallIT 透過
django-auth-ldap接 Windows AD 做無縫登入,認證成功後發 HttpOnly Cookie(JWT 或 Session Token)防 XSS 提取。
sequenceDiagram
participant U as 前端 (React)
participant API as 後端 api/
participant LDAP as AD / LDAP
participant SVC as service/
U->>API: POST /login {帳號, 密碼}
API->>LDAP: bind(帳號, 密碼)
LDAP-->>API: 認證成功 + AD Group 資訊
API->>SVC: determineRole(user, AD Groups)
SVC-->>API: User / 行政 / 主官管 / IT
API-->>U: Set-Cookie: token=...; HttpOnly; Secure
U->>API: 後續請求自動帶 cookie
| 設計 | 為什麼 |
|---|---|
python-ldap 直連通訊協定 |
避開 COM 元件層級異常(舊系統痛點) |
| HttpOnly Cookie | JS 拿不到 token → 阻 XSS |
| Secure flag | 強制 HTTPS 傳輸 |
角色判定在 service/ 層 |
集中授權邏輯 |
依 AD Group 或資料庫白名單判定 4 種角色:User / 行政 / 主官管 / IT。
每個 API 請求都會:
request.user 是否具備對應角色(防越權)刪除/編輯 API 尤其要做這層檢查 — 不能只信前端 UI 把按鈕藏起來。
| 舊(ASP.NET Web Forms) | 新(Django + LDAP) | |
|---|---|---|
| AD 連線方式 | 透過 COM 元件 | python-ldap 直連 |
| Token 存放 | LocalStorage / Session | HttpOnly Cookie |
| 角色判定位置 | 散落各 page | 集中在 service/determineRole |
| 穩定性 | COM 異常會整個炸 | 通訊協定層級失敗有錯誤訊息可控 |