04 · Scorecard — sso-api
Legend
- 🔴 Critical = active security/data-loss/availability risk
- 🟡 High = correctness/maintainability hazard, real impact
- 🟢 Medium = friction/hygiene, not yet dangerous
| Debt ID | Severity | คำอธิบาย | หลักฐาน (file:line) | ข้อเสนอการแก้ไข |
|---|---|---|---|---|
| CORR-SSO-01 | High | signIn() ไม่ออก JWT ของตัวเอง (บล็อกโค้ด sign ถูก comment ปิด) และ JwtService ไม่ได้ inject ผ่าน constructor เลย ทำให้ endpoint ที่ผ่าน JwtAuthGuard (signOut, verifySession, request2FA, verify2FA) เรียกต่อจาก signIn() ของ service เดียวกันไม่ได้จริง | sso-api/src/app.service.ts:27,143-191,220-223, sso-api/src/app.controller.ts:36-51 | ตัดสินใจให้ชัดว่า flow 2FA/logout ควรใช้ JWT จาก sso-api เองหรือจาก service อื่น (เช่น vtrc-api) แล้วเปิด/ปิด guard ให้สอดคล้อง ถ้าจะออก JWT เอง ต้อง inject JwtService ผ่าน constructor ให้ถูกต้อง |
| CORR-SSO-02 | Medium | catch block ของ signIn() เข้าถึง error.response.data โดยไม่เช็ค error.response ก่อน — ถ้า network error (timeout/DNS/connection refused) จะเกิด TypeError ซ้อนใน catch block เอง แทนข้อความ error ที่ตั้งใจไว้ | sso-api/src/app.service.ts:184-189 | เพิ่ม optional chaining/null check ก่อนอ่าน error.response?.data?.responseCode |
| QUAL-SSO-01 | Medium | verifySession() เป็น stub คืนค่า { body } โดยตรง ไม่มี logic ตรวจ session แท้จริง — endpoint นี้ผ่าน JwtAuthGuard แต่ไม่ทำหน้าที่ตามชื่อ | sso-api/src/app.service.ts:220-223 | implement การตรวจสอบ session จริง หรือลบ endpoint ถ้าไม่มีแผนใช้ |
| OBS-SSO-01 | Medium | repo ไม่มี Dockerfile, docker-compose.yml, .env/.env.example, หรือไฟล์ CI pipeline ใดเลย — ต่างจากอีก 4 repo ในกลุ่มเดียวกัน ทำให้วิธี deploy จริงตรวจสอบไม่ได้จากโค้ด | ไม่พบไฟล์จากการค้นทั้ง repo (branch: master) — UNVERIFIED | เพิ่มไฟล์ deploy manifest และ .env.example (ไม่ใส่ secret จริง) เข้า repo เพื่อให้ onboarding/debug ทำได้โดยไม่ต้องถามทีม infra |
| QUAL-SSO-02 | Medium | ssoEndpoint/ssoUsername/ssoPassword/ssoAppId อ่านจาก process.env โดยตรง ในขณะที่ค่าอื่นในไฟล์เดียวกัน (db.*, port) ผ่าน ConfigService — ไม่สม่ำเสมอ ทำให้ทดสอบ mock ConfigService ไม่ครอบคลุมค่าที่อ่านจาก process.env โดยตรง | sso-api/src/app.service.ts:22-25 | ย้ายทุกค่าที่มาจาก env ให้ผ่าน ConfigService ให้สม่ำเสมอ |
UNVERIFIED
- โฮสต์/โดเมนจริงของ
SSO_END_POINT, ค่าPORT/BASE_PATHจริงที่ deploy ใช้ — ไม่มี.env/.env.exampleให้ตรวจ - วิธี deploy/orchestrate service นี้ใน production
- เหตุผลที่ NestJS เวอร์ชันของ repo นี้ (
^10.0.0) ใหม่กว่าอีก 4 repo ในกลุ่มเดียวกันที่ยัง^9.0.0— อาจสื่อว่า repo นี้ถูกสร้างทีหลังหรือ modernize แยก แต่ไม่มีหลักฐาน commit history ที่ยืนยันเจตนาในเอกสารนี้