Private Docs

Endpoint ที่ยังไม่ปิด — 35 เส้นที่ audit ว่าไม่มีคนเรียก แต่จงใจเว้นไว้

รายการเส้นที่อยู่ในถัง NONE ของ audit แต่ไม่ถูกปิดด้วย [NotExposed] ในรอบ 10/09 พร้อมเหตุผลรายเส้นและสิ่งที่ต้องทำก่อนจะปิดได้

อัปเดต: 2026-09-10

Endpoint ที่ยังไม่ปิด — 35 เส้นที่ audit ว่าไม่มีคนเรียก แต่จงใจเว้นไว้

เอกสารพี่น้องของ API Inventory · ไฟล์นั้นคือรายการเต็มพร้อมสถานะทุกเส้น ไฟล์นี้ขยายเฉพาะ 35 เส้นที่ยังเปิดอยู่ทั้งที่ audit จัดเป็น NONE เพื่อให้กลับมาแก้ทีหลังได้

รอบ 10/09/2026 ปิดไป 216 เส้น ด้วย [NotExposed] · 35 เส้นนี้ถูกกันออกอย่างตั้งใจ ไม่ใช่ตกหล่น

สรุปตามเหตุผล

เหตุผลเส้น
audit รอบ 09/09 เจอ caller จริง13
แผนแก้ถังไปแล้ว ไม่ใช่ NONE6
Sentinel — กันทั้ง service ไว้รอบนี้11
caller อยู่นอก repo ทั้งหมด2
webhook จาก Entra1
โค้ดไม่ได้ถูก build จริง2
รวม35

audit รอบ 09/09 เจอ caller จริง (13 เส้น)

audit 2026-09-07 บอกว่าไม่มีใครเรียก แต่ scan ซ้ำวันที่ 09/09 เจอ call site จริงในโค้ดปัจจุบัน — ส่วนใหญ่คือฟีเจอร์ที่ merge ลงหลังวัน audit

ServiceVerbRouteรายละเอียด
FileManagementServicePOST/file-management/v1/files/uploadaudit 09/09 เจอ caller: FE
FileManagementServiceGET/file-management/v1/files/{fileId:guid}/downloadaudit 09/09 เจอ caller: FE
UserServiceGET/user-service/v1/admin/amlo/casesaudit 09/09 เจอ caller: FE
UserServiceGET/user-service/v1/admin/amlo/companies/{companyId:guid}/membersaudit 09/09 เจอ caller: FE
UserServicePOST/user-service/v1/admin/amlo/companies/{companyId:guid}/unblockaudit 09/09 เจอ caller: FE
UserServiceGET/user-service/v1/admin/amlo/companies/{companyId:guid}/unblock-historyaudit 09/09 เจอ caller: FE
UserServiceGET/user-service/v1/admin/amlo/current-generationaudit 09/09 เจอ caller: FE
UserServicePOST/user-service/v1/admin/amlo/trigger-syncaudit 09/09 เจอ caller: FE
UserServiceGET/user-service/v1/admin/amlo/unblock-historyaudit 09/09 เจอ caller: FE
UserServiceGET/user-service/v1/apps/{app_id}/modes/{mode}/rolesaudit 09/09 เจอ caller: FE
UserServiceGET/user-service/v1/users/meaudit 09/09 เจอ caller: FE
UserServiceGET/user-service/v1/users/me/applications/{applicationId:guid}/permissionsaudit 09/09 เจอ caller: FE
UserServiceGET/user-service/v1/users/me/detailsaudit 09/09 เจอ caller: FE

ต้องทำอะไรก่อนจะปิดได้ — ไม่ต้องทำอะไร ปล่อยเปิดไว้ถูกแล้ว · ถ้าจะปิดต้องรื้อว่า caller นั้นเลิกใช้จริงหรือยัง

แผนแก้ถังไปแล้ว ไม่ใช่ NONE (6 เส้น)

มติในแผนหลักย้ายเส้นเหล่านี้ออกจากถัง NONE ไปเป็น FE หรือ BE ตั้งแต่ก่อนลงมือ

ServiceVerbRouteรายละเอียด
NotificationServicePOST/notification-service/v1/notifications/batchแผนแก้ถังเป็น FE/BE แล้ว
UserServiceGET/user-service/v1/line-connectivity/instances/{id:guid}แผนแก้ถังเป็น FE/BE แล้ว
UserServicePOST/user-service/v1/line-connectivity/instances/{id:guid}/steps/{stepType}แผนแก้ถังเป็น FE/BE แล้ว
UserServicePOST/user-service/v1/line-connectivity/register/startแผนแก้ถังเป็น FE/BE แล้ว
UserServicePOST/user-service/v1/line-connectivity/unsubscribe/startแผนแก้ถังเป็น FE/BE แล้ว
UserServiceGET/user-service/v1/subscriptions/usersแผนแก้ถังเป็น FE/BE แล้ว

ต้องทำอะไรก่อนจะปิดได้ — ไม่ต้องทำอะไรกับ [NotExposed] · ฝั่ง BE จัดการด้วย [ApiExplorerSettings] ของ Lane BE ไปแล้ว

Sentinel — กันทั้ง service ไว้รอบนี้ (11 เส้น)

แผนหลักข้อ 8.3 สั่งให้ทำ Sentinel เป็นตัวสุดท้ายหรือข้ามไปก่อน เพราะผู้เรียกหลายเส้นเป็น browser และ Entra ที่ redirect เข้ามา ไม่ใช่โค้ดใน repo ⇒ static analysis มองไม่เห็นโดยโครงสร้าง

ServiceVerbRouteรายละเอียด
SentinelGatewayServiceGET/sentinel/antiforgery-tokenaudit 09/09 เจอ caller: FE
SentinelGatewayServiceGET/sentinel/errorแผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra
SentinelGatewayServicePOST/sentinel/idle-logoutแผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra
SentinelGatewayServicePOST/sentinel/internal/resolve-sessionแผนแก้ถังเป็น FE/BE แล้ว
SentinelGatewayServicePOST/sentinel/logout-entraแผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra
SentinelGatewayServiceDELETE/sentinel/sessionsแผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra
SentinelGatewayServiceGET/sentinel/sessionsแผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra
SentinelGatewayServiceGET/sentinel/sessions/by-email/{email}แผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra
SentinelGatewayServiceDELETE/sentinel/sessions/{sessionId:guid}แผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra
SentinelGatewayServiceGET/sentinel/tenantsแผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra
SentinelGatewayServiceGET/sentinel/userแผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra

ต้องทำอะไรก่อนจะปิดได้ — ต้องไล่ทีละเส้นว่าใครเรียกจริง โดยดูจาก APIM policy, การ redirect ของ OIDC flow และ log จริง ก่อนตัดสินใจปิด — ห้ามยกลิสต์มาแปะทั้งชุด

caller อยู่นอก repo ทั้งหมด (2 เส้น)

ผู้เรียกไม่ใช่โค้ดในองค์กร จึงไม่มีทางโผล่ใน static scan ไม่ว่า scan กี่รอบ

ServiceVerbRouteรายละเอียด
WorkflowServicePOST/callback/onActionChangedcaller อยู่นอก repo (browser/webhook/probe)
WorkflowServicePOST/callback/onInitcaller อยู่นอก repo (browser/webhook/probe)

ต้องทำอะไรก่อนจะปิดได้ — ต้องยืนยันจาก log หรือ config ของระบบต้นทางก่อน ไม่ใช่จากการ grep

webhook จาก Entra (1 เส้น)

Microsoft Entra Custom Authentication Extension เรียกเข้ามาโดยตรง — เป็น external webhook ที่ผูกกับ ระบบ login ไม่ใช่ repo ไหนใน scan

ServiceVerbRouteรายละเอียด
NotificationServicePOST/notification-service/v1/auth-extension/email-otp-sendcaller คือ Entra Custom Authentication Extension

ต้องทำอะไรก่อนจะปิดได้ — ปิดไม่ได้จนกว่าจะเลิกใช้ Custom Authentication Extension ตัวนั้น

โค้ดไม่ได้ถูก build จริง (2 เส้น)

route อยู่ในไฟล์ที่ถูก <Compile Remove> ออกจาก build ⇒ ไม่มี action จริงตอน runtime ให้แปะ attribute

ServiceVerbRouteรายละเอียด
WorkflowServiceGET/TestMediatoRTestController ถูก <Compile Remove> ที่ WorkFlow01.API.csproj:17
WorkflowServiceGET/testTestController ถูก <Compile Remove> ที่ WorkFlow01.API.csproj:17

ต้องทำอะไรก่อนจะปิดได้ — ไม่ต้องแปะ [NotExposed] · ถ้าจะเก็บกวาดจริงคือลบไฟล์ทิ้ง ซึ่งเป็นคนละงาน

ถ้าจะกลับมาปิดเส้นพวกนี้

  1. เลือกเส้นที่จะปิด แล้วหา หลักฐานว่าไม่มีคนเรียกจริง จากของที่ static analysis มองไม่เห็น — APIM analytics, log ของ ingress, Postman collection, cronjob, และ config ของระบบต้นทางที่อยู่นอกองค์กร
  2. แปะ [NotExposed(Reason = "...")] บน action เท่านั้น ห้ามแปะบน class เพราะจะปิด sibling ทั้ง controller
  3. dotnet build แล้วตรวจว่า diff เป็น insert อย่างเดียว (git diff -- '*.cs' | grep -cE "^-[^-]" = 0) — controller หลายไฟล์มีคอมเมนต์ภาษาไทย การแก้ด้วย text editor ทำ encoding พังเงียบ ๆ ได้โดย build ยังเขียว
  4. deploy dev ก่อน แล้วดูว่ามีอะไรพัง ค่อยขึ้น uat — ทีละ service ไม่ใช่ทีเดียวทั้งหมด

กลไกของ [NotExposed] อธิบายไว้ที่ Package — ปิด endpoint ที่ routing table