อนาคตจำเป็นต้องมี Password อยู่ไหม

อนาคตจำเป็นต้องมี Password อยู่ไหม

## ทำไม DevOps ต้องรู้จัก… ##
คำเตือน! โพสนี้ยาวและลึก #ลึกกว่าระดับน้ำทะเลปานกลาง 55++++

ก่อนจะไปงงกันมากกว่านี้
แอดขออธิบายแบบคนทำบัญชีอ่านแล้วก็เข้าใจเรื่องนี้ก่อนล่ะกัน 😃

Authentication คือกระบวนการตรวจสอบตัวตนของผู้ใช้
หรือ verifies user identities นั้นแหละครับ
ส่วนจะตรวจสอบตัวตนด้วยวิธีการ(โปรโตคอล)
ไหนเดียวแอดมินจะเล่าให้หลับ และงง 55++

ส่วน Authorization คือกระบวนการตรวจสอบสิทธิ์การเข้าถึง
หรือ validates access permissions ครับ

ยกตัวอย่าง ง่าย ๆ “คอนโด” ล่ะกันนน

Authentication คือ Keycard ที่พิสุจน์แล้วว่าผู้ใช้ที่ถือ Keycard นี้มีสิทธิ์เข้า-ออกอาคาร ตึกที่พักได้ (ใครก็ได้ที่ถือ Keycard) เริ่มเห็นความเสี่ยงล่ะ 55+++
Authorization คือ สิทธิ์ลับที่อยู่ใน Keycard ที่ควบคุม
เพื่อบอกว่าลิฟท์จะเปิดเฉพาะชั้นห้องของคุณเท่านั้น!

อย่าไปเคาะประตูผิดห้องล่ะ 😄
งั้นอย่ารีบไถผ่าน ยาวไปไม่ว่างอ่าน กดแชร์เก็บไว้ครับ

จากตัวอย่าง…
เราเริ่มเห็นว่ากระบวนการมันแตกต่างกัน
Authentication ก็เปรียบเหมือน “login/password”
แต่ Authorization คือ OAuth แล้วมันคือไรล่ะที่นี้ 55+++

ปล่อยให้ งง ๆๆ
เอาล่ะที่นี้จะเป็นรายละเอียดแบบลึก
(ลึกกว่าระดับน้ำทะเลปานกลาง 😄)

ข้อแตกต่างระหว่าง AuthN และ AuthZ

รูปแบบกระบวนการตรวจสอบตัวตนของผู้ใช้
ที่จัดอยู่ในกลุ่ม Authentication ดังนี้

[1.] Password-Based พวก user login ต่าง ๆ
ที่เกิดจากการที่เราต้องไปสมัครหรือลงทะเบียนบริการเหล่านั้นแล้ว

[2.] Passwordless หรือพวก OTP ทาง SMS, code ที่รับทาง email แล้วเอาไปยืนยัน, Link ให้กดยืนยัน

[3.] Social authentication เช่น Facebook, Twitter, Google, Microsoft, อื่น ๆ ทุกอย่างที่เกิดขึ้นจากการลงทะเบียน

[4.] Multi-Factory authentication กระบวนการที่ต้องกระทำ 2ครั้งเพื่อยืนยันตัวตน

[5.] API authentication กระบวนการที่เซิร์ฟเวอร์รับรองความถูกต้องให้ users นั้นแล้ว ประมาณว่าส่งคำขอมารับข้อมูลกลับไปเลย (Basic HTTP Authentication)

[6.] Barcode และ Biometric พวกกระบวนการสแกนต่าง ๆ

คราวนี้มาฝั่ง Authorization กันบ้างครับ
มีกระบวนการรูปแบบไหนบ้าง

[1.] HTTP Authorization
ทุกกระบวนการที่ต้องใส่ username/password เพื่อเข้าระบบด้วยโปรโตคอล HTTP ผ่าน Browser และเป็นกระบวนการที่ใช้ทั้ง authentication+authentication เพื่อเข้าถึงข้อมูลที่ตนเองมีสิทธิ์เข้าถึงได้

[2.] API keys
กระบวนการที่ใช้ทั้ง authentication+authentication
เมื่อเราสมัครใช้บริการระบบอะไรก็แล้วแต่ที่เปิด API ให้ใช้งาน
เราจะสามารถสร้าง API key ขึ้นมาใช้งานได้

ยกตัวอย่าง เช่น
โจยท์: ต้องการส่งอีเมลจากเว็บไซต์ด้วย API (ไม่ใช่ SMTP auth)

วิธีการ:
1. ไปสมัครใช้บริการ Email services ที่รองรับ API
2. สมัครเสร็จก็สร้าง API keys ขึ้นมาใช้กับโดเมนเว็บไซต์นั้น
3. นำ API keys ได้ไปเขียน code เพื่อใช้สำหรับส่งอีเมล

เราจะเห็นได้ว่ามันไม่ต้องมาใส่ username/password
เพื่อ login ไปส่งอีเมล

หรืออีกตัวอย่างครับ
สมัครบริการ AWS หรือ Google Cloud เพื่อเช่า instance แต่เราจะไม่สร้าง instance ด้วยเครื่องมือของ AWS หรือ GCP

1. สมัคร AWS หรือ GCP จากนั้นก็สร้าง API key สำหรับบริการเซิร์ฟวิสที่ต้องการ เช่น aws lightsail

2. เขียนโปรแกรม API สำหรับสร้างเครื่อง instance บน Lightsail
จะด้วยภาษาอะไรก็แล้วแต่ถนัดเลย
เช่น Java, Python, Ruby, PHP, .NET (C#), Go, JavaScript (Node.js) และ C++ ขึ้นอยู่กับ Services นั้นรองรับด้วย

ไม่ใช่อยากเขียนภาษาอะไรก็ได้นะครับ 55+++

[3.] OAuth 2.0 Authorization (โอ-อท)

อย่าที่ทราบกันปัจจุบันนี้แอพพลิเคชันต่าง ๆ
นักพัฒนาหันมาเพิ่มการล็อกอินระบบกับ Facebook, Google, Twitter, Email, Apple ID และอื่น ๆ กันแล้ว

ว่าแต่… OAuth มันเกี่ยวกับอะไร?

OAuth ย่อมาจาก Open Authentication
ส่วนเลข 2 ที่ต่อท้ายคือ ปัจจุบันเป็น Version 2 ครับ

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

OAuth 2.0 เป็นวิธีการที่ปลอดภัย
และได้ความนิยมอย่างมากสำหรับ Developer ในปัจจุบัน
เพราะระบบที่ล็อกินด้วย Username และ Password มีโอกาสเสี่ยงต่อการโดนดักข้อมูลได้ถ้าเขียนโปรแกรมไม่ดีพอครับ

[4.] JWT Authorization
กระบวนการที่เรียกว่า JSON Web Token ที่ต้อง pair key จับคู่ public/private ที่ส่งผ่านข้อมูลด้วยการยืนยัน token เป็นต้น

และก่อนจะจบโพสนี้

[5.] OpenID Authorization
ของดีที่อยู่บน OAuth 2.0 อีกชั้นหนึ่ง 55+++
มันคืออะไรน้อออ
มันเป็น framework สำหรับกระบวนการ authentication
เป็นโปรโตคอลที่ใช้ในการร้องขอข้อมูลจากจาก OAuth Provider อีกทีนึ่ง

ตัวอย่าง สมมุติว่าเราสร้างแอพพลิเคชั่นขึ้นมาหนึ่งแอพฯ
แล้วไม่ต้องการทำระบบล็อกอิน แต่ต้องการตรวจสอบสิทธิ์ผู้ใช้จาก Facebook, Apple ID จะทำไง?

เราก็ใช้ framework ตัวกลาง OpenID นี่แหละไปต่อสายคุย
เดี๋ยว เดี๋ยวๆ+++++
ไม่ใช่ยกหูคุยโทรศัพท์นะ 😄

แอพฯต่อสายโปรโตคอลกับ Facebook และ Apple ID
ว่าผู้ใช้คนนี้มีตัวตนไหม ถ้ามีจริงขอดึงข้อมูลผู้ใช้คนนี้
มายืมและอนุมัติให้เข้าระบบบริการบนแอพฯ ของฉันหน่อย

Flow สำหรับเรื่องของ OAuth 2.0 + OpenID ยังมีรายละเอียดอีกมายมาย เช่น ประเภทการให้สิทธิ์ (Grant type) และอื่น ๆ อีกมากมายผู้ทีสนใจก็เปิดกูเกิลโลดดคร้าบบ

เพิ่มเติม:
https://tools.ietf.org/html/rfc6749
https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2

#SUSMAN #Authentication #Authorization #OAuth2

Leave a Reply

Scroll to top
X