วิธีทำระบบยืนยันตัวตนด้วย Auth0 ใน Hono Framework ง่ายๆ ใน 5 บรรทัด

11 นาที 16 views บันทึกเป็น PDF
วิธีทำระบบยืนยันตัวตนด้วย Auth0 ใน Hono Framework ง่ายๆ ใน 5 บรรทัด

มือใหม่หัดเขียนเว็บต้องอ่าน! มาดูวิธีทำระบบล็อกอิน (Authentication) ด้วย Auth0 ใน Hono แบบง่ายๆ ช่วยให้แอปของคุณปลอดภัยและดูเป็นมืออาชีพขึ้นทันที

ทำไมการทำระบบยืนยันตัวตนถึงเป็นเรื่องยากสำหรับมือใหม่

เวลาเราสร้างเว็บแอปพลิเคชันขึ้นมาสักตัว สิ่งที่ขาดไม่ได้เลยคือระบบ Authentication (การยืนยันตัวตนว่าผู้ใช้งานเป็นใคร) ซึ่งเปรียบเสมือนด่านตรวจหน้าประตูบ้าน หากเราเขียนระบบนี้เองตั้งแต่ต้น เราต้องรับมือกับทั้งการเก็บรหัสผ่านให้ปลอดภัย การทำระบบลืมรหัสผ่าน ไปจนถึงการป้องกันการแฮ็ก (การเจาะระบบเพื่อขโมยข้อมูล) ซึ่งเป็นงานที่ซับซ้อนมากสำหรับมือใหม่ที่เพิ่งเริ่มหัดเขียนโค้ด

ลองนึกภาพว่าคุณกำลังสร้างแอปฯ แชทสักตัว การที่คุณต้องมานั่งออกแบบระบบเก็บรหัสผ่านที่เข้ารหัสไว้อย่างดี (Hash - การแปลงข้อมูลให้เป็นรหัสที่อ่านไม่ออก) รวมถึงการจัดการ Session (ข้อมูลที่บอกว่าใครกำลังล็อกอินอยู่) อาจทำให้คุณถอดใจก่อนจะได้เริ่มฟีเจอร์หลักของแอปฯ ด้วยซ้ำ นั่นคือเหตุผลที่นักพัฒนาส่วนใหญ่เลือกใช้ Identity Provider (ผู้ให้บริการระบบยืนยันตัวตน) อย่าง Auth0 เพื่อให้เราโฟกัสกับการสร้างฟีเจอร์เด็ดๆ ได้มากกว่า

สำหรับการเริ่มต้นในเส้นทางโปรแกรมเมอร์ การเลือกใช้เครื่องมือมาตรฐานอุตสาหกรรมจะช่วยให้คุณประหยัดเวลาและปลอดภัยกว่าการลองผิดลองถูกเอง นอกจากนี้ยังช่วยให้เราเข้าใจมาตรฐานความปลอดภัยระดับสากลที่บริษัทชั้นนำเขาใช้กัน การเรียนรู้วิธีเชื่อมต่อบริการเหล่านี้เข้ากับเฟรมเวิร์กสมัยใหม่อย่าง Hono (เครื่องมือสร้างเว็บแอปฯ ที่เน้นความเร็วและเบา) จึงเป็นทักษะที่คุ้มค่ามาก

รู้จักกับ Auth0 และความง่ายของ Hono SDK

Auth0 คือบริการที่เข้ามาจัดการเรื่องการล็อกอินให้เราแบบเบ็ดเสร็จ ไม่ว่าจะเป็นการสมัครสมาชิกผ่านอีเมล หรือการใช้ Google Account ในการล็อกอิน (Social Login) โดยที่ระบบของ Auth0 จะคอยดูแลความปลอดภัยทั้งหมดให้เรา ส่วน Hono ก็คือ Framework (โครงสร้างโปรแกรมสำเร็จรูป) ที่กำลังมาแรงมากในปัจจุบัน เพราะมันทำงานได้เร็วมากบนทุกสภาพแวดล้อม ไม่ว่าจะเป็น Edge Computing (การประมวลผลที่อยู่ใกล้ผู้ใช้งานมากที่สุด) หรือ Node.js

การใช้ Auth0 Hono SDK (ชุดเครื่องมือสำหรับเขียนโปรแกรม) จะช่วยให้เราตัดขั้นตอนที่ยุ่งยากออกไปได้ทั้งหมด คุณไม่ต้องเขียนโค้ดเชื่อมต่อฐานข้อมูลเพื่อเช็ครหัสผ่านเองอีกต่อไป เพียงแค่ติดตั้งไลบรารี (คลังคำสั่งที่คนอื่นเขียนไว้ให้เราใช้) แล้วเรียกใช้งานผ่านบรรทัดโค้ดเพียงไม่กี่บรรทัด ระบบยืนยันตัวตนที่แข็งแกร่งก็จะพร้อมใช้งานทันที

หากคุณกำลังฝึกทำโปรเจกต์ (งานที่ทำเพื่อเก็บสะสมผลงาน) การใช้เครื่องมือเหล่านี้จะทำให้ Portfolio (แฟ้มสะสมผลงาน) ของคุณดูเป็นมืออาชีพขึ้นมาก เพราะคุณสามารถพิสูจน์ได้ว่าคุณเข้าใจวิธีการใช้ระบบความปลอดภัยที่ได้มาตรฐาน การทำความเข้าใจว่า SDK ทำงานอย่างไรจะช่วยให้คุณเห็นภาพรวมของการเชื่อมต่อ API (ช่องทางสื่อสารระหว่างซอฟต์แวร์) ซึ่งเป็นพื้นฐานสำคัญของโปรแกรมเมอร์ยุคนี้

// ติดตั้ง SDK ผ่าน npm
npm install @hono/auth-js

// นำเข้าโมดูลและตั้งค่าเริ่มต้น
import { auth0 } from '@hono/auth-js'

const app = new Hono()
app.use('*', auth0({ domain: 'your-domain.auth0.com', clientId: 'your-client-id' }))

ในโค้ดชุดนี้ บรรทัดแรกเป็นการสั่งติดตั้งเครื่องมือผ่านโปรแกรมจัดการแพ็กเกจ (ตัวช่วยโหลดโค้ดคนอื่นมาใช้) ส่วนบรรทัดที่สองและสามคือการเรียกใช้ฟังก์ชัน (คำสั่งที่ทำงานเฉพาะอย่าง) เพื่อเตรียมพร้อมใช้งาน บรรทัดสุดท้ายคือหัวใจสำคัญที่ทำการ Mount (การเชื่อมต่อโปรแกรมเข้ากับระบบ) โดยใส่รายละเอียดบัญชีที่คุณได้จากหน้าเว็บ Auth0 ลงไป

ผลลัพธ์ที่ได้คือแอปฯ ของคุณจะมีเส้นทางสำหรับล็อกอินและล็อกเอาต์โดยอัตโนมัติ คุณจะเห็นระบบพาผู้ใช้งานไปที่หน้า Auth0 เพื่อกรอกรหัสผ่าน แล้วส่งกลับมาที่แอปฯ ของคุณพร้อมข้อมูลยืนยันตัวตนทันทีโดยไม่ต้องเขียนฟอร์มเองเลยสักบรรทัดเดียว

การปกป้องเส้นทางในแอปพลิเคชันด้วย Middleware

เมื่อเรามีระบบล็อกอินแล้ว สิ่งที่ต้องทำต่อมาคือการ Protect Route (การจำกัดสิทธิ์การเข้าถึงหน้าเว็บ) เพื่อให้แน่ใจว่าเฉพาะคนที่ล็อกอินแล้วเท่านั้นถึงจะดูหน้าโปรไฟล์หรือข้อมูลสำคัญได้ ใน Hono เราจะใช้สิ่งที่เรียกว่า Middleware (ตัวกลางที่คอยดักตรวจสอบข้อมูลก่อนถึงจุดหมาย) เพื่อทำหน้าที่คัดกรองผู้ใช้งานเปรียบเสมือนยามเฝ้าประตู

การใช้ Middleware ช่วยให้โค้ดของคุณสะอาดและอ่านง่ายมาก คุณไม่จำเป็นต้องเขียนคำสั่งตรวจสอบเงื่อนไขซ้ำๆ ในทุกหน้าของแอปฯ เพียงแค่แปะคำสั่งป้องกันไว้ที่หน้าเส้นทางที่ต้องการ ระบบก็จะจัดการตรวจให้โดยอัตโนมัติ หากมีคนพยายามเข้าหน้าเว็บโดยไม่ล็อกอิน Middleware จะสั่งให้ระบบเด้งกลับไปที่หน้าล็อกอินทันที

มือใหม่มักพลาดโดยการลืมใส่การป้องกันในบางหน้า ทำให้ข้อมูลหลุดออกไปได้ง่ายๆ ดังนั้นการฝึกใช้ Middleware ให้เป็นนิสัยจะช่วยป้องกันบั๊ก (ข้อผิดพลาดของโปรแกรม) ด้านความปลอดภัยได้ดีที่สุด ลองจินตนาการว่าคุณต้องคอยเช็คทุกหน้าด้วยตัวเอง คุณอาจจะพลาดไปหน้าใดหน้าหนึ่ง แต่การใช้ Middleware จะทำให้คุณมั่นใจได้ว่าทุกเส้นทางถูกดูแลอย่างเท่าเทียมกัน

// ใช้ Middleware ป้องกันหน้าเว็บ
app.get('/dashboard', requiresAuth(), (c) => {
  return c.text('ยินดีต้อนรับสู่หน้าข้อมูลลับ!')
})

ในตัวอย่างนี้คำสั่ง requiresAuth() จะทำหน้าที่เป็นเหมือนด่านตรวจ ถ้าผู้ใช้งานยังไม่ล็อกอิน ระบบจะหยุดการทำงานตรงนี้ทันทีและไม่ยอมให้เข้าถึงเนื้อหาด้านใน หากล็อกอินแล้วตัวแปร c จะเก็บข้อมูลผู้ใช้งานไว้ให้เราเรียกใช้ต่อได้เลย

ผลลัพธ์เมื่อคุณรันโค้ดนี้คือ หน้า /dashboard จะถูกล็อคไว้ หากคุณพิมพ์ URL นี้ในเบราว์เซอร์โดยที่ยังไม่ได้ล็อกอิน ระบบจะถูกเปลี่ยนเส้นทางไปที่หน้า Auth0 ทันที หากล็อกอินสำเร็จ ระบบจะแสดงข้อความต้อนรับตามที่เขียนไว้

การจัดการสิทธิ์และข้อมูลผู้ใช้งานบน Edge

ในการทำงานจริง เราไม่ได้ต้องการแค่รู้ว่าใครล็อกอิน แต่เรายังต้องการทราบว่าเขาเป็นใครหรือมีสิทธิ์อะไร เช่น เป็นผู้ดูแลระบบ (Admin) หรือผู้ใช้งานทั่วไป (User) เราสามารถใช้ฟังก์ชัน claimEquals เพื่อตรวจสอบค่าที่อยู่ใน Token (บัตรผ่านดิจิทัลที่มีข้อมูลระบุตัวตน) ได้อย่างแม่นยำและรวดเร็ว

ข้อมูลเหล่านี้มักจะถูกเก็บไว้ในรูปแบบของ JWT (JSON Web Token - มาตรฐานการส่งข้อมูลยืนยันตัวตน) ซึ่งเราสามารถถอดรหัสออกมาดูโปรไฟล์ของผู้ใช้งานได้จากทุกที่ ไม่ว่าแอปฯ ของคุณจะรันอยู่บนเซิร์ฟเวอร์ที่ไหนก็ตาม การดึงข้อมูลผู้ใช้บน Edge จึงเป็นสิ่งที่ทำให้เว็บแอปฯ ของคุณทำงานได้ไวและตอบโจทย์ผู้ใช้งานทั่วโลก

ถ้าคุณกำลังฝึกทำโปรเจกต์ การรู้วิธีดึงข้อมูลโปรไฟล์ เช่น ชื่ออีเมลหรือรูปภาพมาแสดง จะช่วยให้แอปฯ ของคุณดูสมบูรณ์แบบมากขึ้น อย่าลืมว่าการจัดการข้อมูลเหล่านี้ต้องคำนึงถึงความเป็นส่วนตัวเสมอ เก็บไว้เฉพาะเท่าที่จำเป็นเพื่อความปลอดภัยของตัวผู้ใช้งานเองและลดความเสี่ยงของระบบ

// ตรวจสอบสิทธิ์ผู้ใช้งาน
app.get('/admin', claimEquals('role', 'admin'), (c) => {
  return c.text('หน้าสำหรับแอดมินเท่านั้น')
})

คำสั่ง claimEquals('role', 'admin') คือการบอกระบบว่า "ให้คนที่มีบทบาทเป็นแอดมินเท่านั้นถึงจะผ่านไปได้" หากข้อมูลใน Token ไม่ตรงตามนี้ ระบบจะปฏิเสธการเข้าถึงทันที ซึ่งเป็นวิธีที่ปลอดภัยและง่ายที่สุดในการจัดการสิทธิ์

ผลลัพธ์ที่ได้คือ คุณสามารถสร้างหน้าเว็บแยกตามระดับความสำคัญของข้อมูลได้โดยไม่ต้องเขียนเงื่อนไขซับซ้อนภายในฟังก์ชันหลัก ช่วยให้โค้ดของคุณดูเป็นระเบียบและจัดการง่ายเมื่อต้องขยายขนาดโปรเจกต์ในอนาคต

เคล็ดลับสำหรับมือใหม่ในการเริ่มใช้งาน Auth0

จุดที่มือใหม่มักจะเจอปัญหาบ่อยที่สุดคือการตั้งค่า Allowed Callback URLs (ที่อยู่หน้าเว็บที่อนุญาตให้ระบบส่งข้อมูลกลับมา) ในหน้า Dashboard ของ Auth0 ถ้าคุณลืมเพิ่มที่อยู่ของแอปฯ ตัวเองลงไป คุณจะเจอข้อผิดพลาดที่ระบุว่า "Unauthorized" (ไม่ได้รับอนุญาต) ทันทีที่ล็อกอินเสร็จ ซึ่งเป็นเรื่องปกติที่เกิดขึ้นได้บ่อย

อีกเรื่องที่สำคัญคือการจัดการกับ Environment Variables (ตัวแปรที่เก็บค่าความลับ เช่น รหัสผ่านหรือกุญแจเข้าถึง) อย่าเผลอเอาค่า clientId หรือ clientSecret ไปแปะไว้ในโค้ดที่อัปโหลดขึ้น GitHub (แหล่งเก็บโค้ดออนไลน์) เพราะคนอื่นจะเอาไปใช้แอบอ้างสิทธิ์ของคุณได้ ให้ใช้ไฟล์ .env ในการเก็บค่าเหล่านี้แทนเสมอ

การฝึกหัดโปรแกรมมิ่งคือการสะสมประสบการณ์จากการเจอปัญหาแล้วแก้ให้ได้ ถ้าติดขัดเรื่องการเชื่อมต่อ ให้ลองอ่าน Error (ข้อความแจ้งเตือนเมื่อเกิดความผิดพลาด) ให้ละเอียด ส่วนใหญ่ Auth0 จะบอกชัดเจนว่าเกิดจากอะไร หากคุณฝึกทักษะการอ่าน Log (บันทึกการทำงานของระบบ) ได้ คุณจะก้าวหน้าเร็วกว่าคนอื่นหลายเท่าแน่นอน

สรุป: เริ่มต้นสร้างแอปฯ ที่ปลอดภัยตั้งแต่วันนี้

การนำ Auth0 เข้ามาใช้ในแอปฯ Hono ไม่ใช่แค่เรื่องของการเขียนโค้ดให้สั้นลง แต่มันคือการวางรากฐานด้านความปลอดภัยที่มั่นคงให้กับโปรเจกต์ของคุณ ตั้งแต่การติดตั้ง 5 บรรทัดแรก จนถึงการจัดการสิทธิ์ระดับสูง คุณได้เห็นแล้วว่าการใช้เครื่องมือมาตรฐานช่วยทุ่นแรงได้มหาศาล และทำให้คุณมีเวลาไปโฟกัสกับฟีเจอร์ที่สร้างมูลค่าจริงๆ

หากคุณกำลังทำโปรเจกต์ Portfolio ลองนำความรู้นี้ไปใช้ดู เช่น สร้างแอปฯ จดบันทึกส่วนตัวที่มีระบบล็อกอินด้วย Google จะทำให้งานของคุณดูน่าประทับใจขึ้นมากในสายตานายจ้าง การแสดงให้เห็นว่าคุณสามารถใช้เครื่องมือระดับมืออาชีพอย่าง Auth0 ได้ เป็นการการันตีว่าคุณพร้อมสำหรับการทำงานในทีมพัฒนาซอฟต์แวร์จริงแล้ว

ขอให้สนุกกับการเขียนโค้ดและอย่าหยุดเรียนรู้เรื่องใหม่ๆ การเป็นโปรแกรมเมอร์ที่เก่งไม่ได้หมายความว่าคุณต้องเขียนทุกอย่างเอง แต่หมายถึงการรู้จักเลือกใช้เครื่องมือที่ถูกต้องเพื่อสร้างงานที่มีคุณภาพและปลอดภัยที่สุดครับ


ที่มา: Add Auth0 to Your Hono App in Just 5 Lines of Code — DEV Community

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

เทคนิคเขียนแอป Flutter สำหรับ Meta Smart Glasses ให้ลื่นไหลและมีประสิทธิภาพ

เทคนิคเขียนแอป Flutter สำหรับ Meta Smart Glasses ให้ลื่นไหลและมีประสิทธิภาพ

เรียนรู้วิธีเขียนแอป Flutter เชื่อมต่อ Meta Smart Glasses ให้ทำงานเร็ว ไม่กระตุก ด้วยการวางสถาปัตยกรรมโค้ดและการจัดการข้อมูลแบบมือโปรที่มือใหม่ทำตามได้จริง

ที่มา: DEV Community

3 hours ago 10 นาที
5 views
เปรียบเทียบ WebSocket, SSE และ Polling เลือกวิธีทำระบบ Real-Time ให้เหมาะกับงาน

เปรียบเทียบ WebSocket, SSE และ Polling เลือกวิธีทำระบบ Real-Time ให้เหมาะกับงาน

อยากทำระบบ Real-Time แต่ไม่รู้จะเลือกใช้ Polling, SSE หรือ WebSocket ดี? มาดูวิธีเลือกใช้ให้เหมาะกับงาน เพื่อให้แอปของคุณทำงานลื่นไหลและประหยัดทรัพยากรเซิร์ฟเวอร์

ที่มา: DEV Community

6 hours ago 10 นาที
4 views