การรับรองความถูกต้อง CLI อย่างถูกวิธี: คู่มือฉบับสมบูรณ์สำหรับทั้ง 4 วิธี
4 วิธีการรับรองความถูกต้อง CLI ที่สำคัญ, วิธีที่ GitHub, AWS, และเครื่องมือ AI นำไปใช้, และข้อผิดพลาดด้านความปลอดภัยที่คุณควรหลีกเลี่ยง
นักพัฒนา CLI ทุกคนจะมี login เป็นคำสั่งแรก และแต่ละตัวก็แก้ปัญหาการรับรองตัวตนแตกต่างกัน
GitHub จะแสดงโค้ดพร้อมเปิดเบราว์เซอร์ให้คุณยืนยัน, AWS จะเปิดเบราว์เซอร์เพื่อใช้ PKCE-based SSO, Stripe ให้คุณยืนยัน pairing code ใน dashboard และเครื่องมือ AI รุ่นใหม่ (Claude Code, OpenAI Codex CLI, Cursor) ก็มีวิธีของตัวเองด้วย
ถ้าคุณกำลังสร้าง CLI ใหม่ เรื่อง auth เป็นสิ่งที่คุณต้องคิดก่อนเป็นอันดับต้น ๆ เลือกผิดอาจโดนผู้ใช้งานบ่น, โดนตรวจสอบความปลอดภัย หรือทั้งคู่ และยุค AI coding agent ที่เรียก CLI แบบอัตโนมัติ ยิ่งต้องระวังให้มากขึ้น: คุณไม่ได้แค่ยืนยันตัวคนแล้ว แต่อาจยื่นข้อมูลรับรองให้งานอัตโนมัติด้วย
นี่คือ 4 วิธีสำคัญในการรับรองความถูกต้อง, ตัวอย่างการนำไปใช้จากเครื่องมือยอดนิยม และข้อผิดพลาดที่ควรหลีกเลี่ยง
มองภาพรวมทั้งสี่วิธี
ก่อนลงรายละเอียด มาดูตารางเปรียบเทียบสั้น ๆ กันก่อน:
| วิธี | เหมาะกับ | ความปลอดภัย | ต้องใช้เบราว์เซอร์? |
|---|---|---|---|
| OAuth Device Code Flow | สภาพแวดล้อมไร้หัว (headless), SSH | สูง | ไม่ (เบราว์เซอร์ในเครื่องใดก็ได้) |
| OAuth ผ่านเบราว์เซอร์ (localhost redirect) | การพัฒนาบนเครื่องโลคอล | สูงสุด | ใช ่ |
| API Keys / PATs | ออโตเมชั่น, CI/CD, ทดลองเร็ว ๆ | ปานกลาง | ไม่ |
| Client Credentials | machine-to-machine, บริการ | สูง | ไม่ |
แต่ละแบบมีข้อดีข้อเสียต่างกัน มาดูรายละเอียดกัน
1. OAuth device code flow (RFC 8628)
แบบนี้ CLI จะโชว์โค้ดเช่น ABCD-1234 และ URL แล้วบอกให้คุณเปิด URL นี้บนอุปกรณ์ใดก็ได้ กรอกโค้ดนั้น
ใครใช้: GitHub CLI (ดีฟอลต์), Azure CLI (ผ่าน --use-device-code), Vercel CLI (เปลี่ยนมาเป็นดีฟอลต์ล่าสุด), OpenAI Codex CLI (เบต้า)
วิธีการทำงาน
- คุณรัน
cli login - CLI ขอ device code จาก auth server, ส่ง
client_idและ scope ที่ต้องการไปด้วย - Server ส่งกลับมาสามอย่าง:
device_code(รหัสภายใน),user_code(โค้ดสั้นให้ผู้ใช้กรอก), และverification_uri(URL สำหรับยืนยัน) - CLI แสดงโค้ดกับ URL แล้วเริ่ม polling ที่ auth server ทุก ๆ 5+ วินาที
- คุณเปิด URL นั้นบนอุปกรณ์ ใดก็ได้ (มือถือ, แลปท็อป, คอมฯ อีกเครื่อง), กรอกโค้ด, login แบบไหนก็ได้ (พาสเวิร์ด, SSO, passkey, MFA)
- เมื่อคุณกด approve, polling ครั้งถัดไปจะได้ access token กับ refresh token กลับมา
- CLI เก็บ token เหล่านี้ไว้ เรียบร้อย
ข้อดีสำหรับนักพัฒนา
จุดขาย: ใช้ได้กับทุกที่ SSH เข้าเซิร์ฟเวอร์? ได้ รันใน Docker? ได้ Cloud IDE ที่ไม่เปิดเบราว์เซอร์? ก็ได้ ไม่ต้องขอเบราว์เซอร์บนเครื่องเดียวกันกับ CLI
ยังรองรับ enterprise auth เต็มรูปแบบ (SAML, OIDC, MFA) เพราะทุกอย่างเกิดในเบราว์เซอร์ ไม่ใช่ในเทอร์มินัล CLI ไม่เห็นรหัสผ่านของคุณเลย
ช่องโหว่ที่นักพัฒนามักมองข้าม
Device code flow คือเป้าของการ phishing ผู้ไม่หวังดีสามารถสร้าง request เพื่อ device code, ได้ user code แบบถูกต้อง แล้วหลอกให้คุณนำไปกรอก ซึ่งเท่ากับคุณ authorize session ของคนร้าย มีรายงานการโจมตีแบบนี้กับ AWS SSO device code แล้วจริง ๆ
จุดนี้ AWS เปลี่ยนนโยบาย โดยตั้งแต่ AWS CLI v2.22.0 ดีฟอลต์ของ aws sso login จะกลายเป็น PKCE-based authorization code flow แทน แต่ device code ยังมีอยู่ผ่าน --use-device-code แค่ไม่ใช่ default
ขณะที่ฝั่ง Microsoft เริ่ม block device code flow ผ่าน conditional access policy แล้ว แสดงว่าพวกเขามองว่านี่คือตัวเลือกความเสี่ยงสูง
สั้น ๆ คือ: Vercel นำ device code flow มาใช้เป็นดีฟอลต์ใน ก.ย. 2025 ส่วน AWS เลิกใช้ เป็นดีฟอลต์ เหมาะกับกรณีที่เปิดเบราว์เซอร์ local ไม่ได้จริง ๆ ถ้าเปิดได้ PKCE ปลอดภัยกว่าเยอะ
สำหรับฝั่งผู้ให้บริการ auth ตัวเลือกนี้กำลังนิยม Logto เพิ่งปล่อย OAuth 2.0 Device Authorization Grant ให้ใช้กับ native app แล้วใน v1.38.0 (open source) และ Logto Cloud ถ้าคุณกำลังสร้าง CLI อยู่ ให้ provider จัดการ logic ให้นั้นสะดวกกว่า เพราะการทำ RFC 8628 ให้ครบถ้วน (หมดอายุ, จำกัด rate, polling, UX ที่หน้า verification) ไม่ง่าย
รายละเอียดเทคนิคจาก RFC
expires_inของ device code ถูกกำหนดโดย auth server ตัว RFC เสนอ 1800 วินาที (30 นาที) เป็นตัวอย่าง ไม่จำเป็นต้องยึดตามนี้- ถ้า server ไม่บอก polling
interval, client ควร default เป็น 5 วินาที - ถ้าเจอ error
slow_down, เพิ่ม interval อีก 5 วินาที - device code ใช้ได้ครั้งเดียวและควรหมดอายุไว
- การแลกเปลี่ยน token ทั้งหมดต้องผ่าน HTTPS

