Skip to content

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 IDSeverityคำอธิบายหลักฐาน (file:line)ข้อเสนอการแก้ไข
CORR-SSO-01HighsignIn() ไม่ออก 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-02Mediumcatch 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-01MediumverifySession() เป็น stub คืนค่า { body } โดยตรง ไม่มี logic ตรวจ session แท้จริง — endpoint นี้ผ่าน JwtAuthGuard แต่ไม่ทำหน้าที่ตามชื่อsso-api/src/app.service.ts:220-223implement การตรวจสอบ session จริง หรือลบ endpoint ถ้าไม่มีแผนใช้
OBS-SSO-01Mediumrepo ไม่มี 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-02MediumssoEndpoint/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 ที่ยืนยันเจตนาในเอกสารนี้