25 คะแนน โดย GN⁺ 2024-05-28 | 8 ความคิดเห็น | แชร์ทาง WhatsApp
  • คำว่า "auth" มีได้สองความหมาย คือการยืนยันตัวตน (authentication) และการกำหนดสิทธิ์ (authorization)
  • สิ่งนี้ทำให้เกิดความสับสนในชื่อไลบรารีหรือแพ็กเกจ
  • คำว่า "authn" และ "authz" ไม่ชัดเจนและเข้าใจได้ยาก

ความแตกต่างระหว่างการยืนยันตัวตนและการกำหนดสิทธิ์

  • การยืนยันตัวตน (authentication): กระบวนการตรวจสอบว่าผู้ใช้คือใคร
  • การกำหนดสิทธิ์ (authorization): กระบวนการตัดสินว่าผู้ใช้สามารถทำอะไรได้บ้าง
  • ทั้งสองแนวคิดแตกต่างกัน และการแก้ปัญหาหนึ่งไม่ได้หมายความว่าอีกปัญหาจะถูกแก้ไปด้วย

ข้อเสนอให้ใช้ "permissions" และ "login"

  • เสนอให้แยกการยืนยันตัวตนเป็น "login" และการกำหนดสิทธิ์เป็น "permissions" อย่างชัดเจน
  • "login" ใช้ได้ทั้งในรูปคำนามและคำกริยา
    • คำนาม: ข้อมูลที่ป้อนเพื่อเข้าถึงระบบ
    • คำกริยา: การล็อกอินเพื่อใช้งานระบบ
  • "permissions" ใช้ในรูปคำนาม และในรูปคำกริยาให้ใช้ "check permissions"

ข้อดีของการใช้คำที่ชัดเจน

  • คนจากสาขาอื่นนอกเหนือจากวิศวกรรมซอฟต์แวร์ก็สามารถเข้าใจได้ง่าย
  • ช่วยให้ทำ abstraction ที่ดีขึ้นได้
  • สามารถออกแบบโดยแยกการยืนยันตัวตนและการกำหนดสิทธิ์เป็นโมดูลคนละส่วนกันได้

ความเห็นของ GN⁺

  • ความสำคัญของการใช้คำที่ชัดเจน: หากคำศัพท์ชัดเจน การสื่อสารจะราบรื่นขึ้นและลดความเข้าใจผิดได้
  • ข้อดีของ abstraction: การแยกการยืนยันตัวตนและการกำหนดสิทธิ์ออกจากกันทำให้การออกแบบระบบยืดหยุ่นขึ้นและดูแลรักษาง่ายขึ้น
  • ตัวอย่างการใช้คำอื่น: นอกจาก "login" และ "permissions" แล้ว คำอย่าง "access control" ก็เป็นอีกทางเลือกที่น่าพิจารณา
  • สิ่งที่ต้องคำนึงเมื่อเริ่มใช้คำใหม่: เมื่อนำคำศัพท์ใหม่มาใช้ ควรมีการพูดคุยและตกลงร่วมกันภายในทีมอย่างเพียงพอ
  • โครงการที่เกี่ยวข้องที่แนะนำ: โครงการตัวอย่างที่แยกการยืนยันตัวตนและการกำหนดสิทธิ์อย่างชัดเจน ได้แก่ OAuth และ OpenID Connect

8 ความคิดเห็น

 
savvykang 2024-05-29

ในหมู่นักพัฒนา การใช้ authn, authz แทน auth และใช้ login, permission ในเอกสารหรือคอนโทรลเลอร์/ฟาซาดที่มีจุดสัมผัสกับผู้ใช้นั้นถือว่าเห็นด้วยได้ แต่ถ้าจะถึงขั้นเลิกใช้ authn, authz ไปเลย ก็รู้สึกว่าไม่ถึงกับจำเป็นขนาดนั้น

 
gcback 2024-05-29

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

 
nemorize 2024-05-28

ถ้าปัญหาคือทั้ง Authentication และ Authorization ต่างก็ย่อเป็น Auth ได้ทั้งคู่
ผมว่าตามที่กล่าวไว้ในเนื้อหา ใช้ Authn กับ Authz ก็น่าจะเพียงพอแล้วนะ...
ถ้ายังคิดว่ายังไม่ชัดเจน จะขยายเพิ่มอีกหน่อยเป็น Authenty กับ Authory ก็คงได้เหมือนกันครับ

 
koxel 2024-05-28

ระบบสิทธิ์ก็ยังมีทั้งแบบ permission และแบบ ACL แล้วถ้างั้นจะจำแนกกันยังไงล่ะ..?
รู้สึกเหมือนฝืน ๆ อยู่นะ...

 
namarie32ilu 2024-05-28

น่าจะเป็นความพยายามเพื่อลดต้นทุนในการสื่อสารกับทีมที่ไม่ใช่นักพัฒนามากกว่า แต่ก็ดูเยอะเกินไปนิดหน่อย

 
iolothebard 2024-05-28

ไม่ได้ตั้งใจรวมสองอย่างเข้าด้วยกันแล้วเรียกว่า auth หรอกหรือ?

 
kuber 2024-05-28

มีทั้ง Authentication และ authorization แล้วทำไมถึงต้องใช้...

 
GN⁺ 2024-05-28
ความคิดเห็นจาก Hacker News
  • "Authorize" และ "Authenticate" เป็นคำที่ดีซึ่งใช้กันมาตั้งแต่ยุคกลาง ความหมายของทั้งสองคำแทบไม่ได้เปลี่ยนไปมากนัก
  • คำสองคำนี้มีความแตกต่างที่สำคัญในระบบเข้ารหัสและความปลอดภัย การเปลี่ยนคำเพื่อลดความสับสนดูเหมือนจะไม่ค่อยช่วยมากนัก
  • ข้ออ้างว่าชื่อ "auth" เป็นสาเหตุของความสับสนยังฟังไม่ค่อยน่าเชื่อ การเปลี่ยนคำไม่น่าจะแก้ปัญหาได้
  • การใช้ตัวย่อ "authn" และ "authz" เป็นทางเลือกที่ดี แต่การใช้คำเต็มก็ใช้ได้เช่นกัน
  • "Identity" และ "Access" Management (IAM) เป็นคำมาตรฐาน ส่วนตัวชอบคำว่า "authnz" มากกว่า
  • "Login" ไม่ครอบคลุมการยืนยันตัวตนด้วยโทเคนหรือคีย์ บัญชีบริการไม่ได้ล็อกอิน แต่ก็ยังต้องมีการยืนยันตัวตนและการให้อำนาจ
  • เส้นแบ่งระหว่าง Authn กับ Authz ไม่ได้ชัดเจนเสมอไป บางครั้งผู้คนดูเหมือนจะชอบคำที่ฟังเท่มากกว่าคำที่ชัดเจน
  • ไม่เคยมีปัญหากับการใช้คำว่า "auth" ในระบบ IAM ถ้าต้องการความเฉพาะเจาะจงมากขึ้นก็ใช้วลีที่เหมาะสมได้
  • "login" และ "permissions" ไม่สามารถครอบคลุมความหมายและความซับซ้อนทั้งหมดของระบบได้ การยืนยันตัวตนมีความหมายมากกว่าการล็อกอิน
  • การยืนยันตัวตนและการให้อำนาจมีความเกี่ยวข้องกันอย่างใกล้ชิด การให้อำนาจทำไม่ได้หากไม่มีการยืนยันตัวตนก่อน
  • ล็อกอินไม่เหมาะจะใช้แทนคำว่าการยืนยันตัวตน เพราะมีหลายกรณีที่การยืนยันตัวตนไม่จำเป็นต้องมีการล็อกอิน
  • "auth" อาจหมายถึงทั้งการยืนยันตัวตนและการให้อำนาจ เพราะสองแนวคิดนี้มักถูกใช้ร่วมกันบ่อยครั้ง
  • การยืนยันตัวตนและการให้อำนาจเป็นคำมาตรฐานในสาย IT และความปลอดภัยสารสนเทศ หากต้องการหลีกเลี่ยงความสับสน การใช้คำเต็มจะดีกว่า
  • "authn" และ "authz" ใช้ได้ดีพอในหมู่คนสายเทคนิค แต่สำหรับคนทั่วไป การใช้ "login" และ "permissions" จะเหมาะกว่า
  • ในชีวิตจริงก็มีแนวคิดคล้ายกันนี้อยู่ เช่น บัตรพนักงานที่ใช้ยืนยันตัวตนและให้สิทธิ์ในการเข้าถึง
  • การให้อำนาจกับสิทธิ์ไม่ใช่สิ่งเดียวกัน สิทธิ์คือสิทธิหรืออภิสิทธิ์ที่ยังไม่ได้ถูกกำหนดให้กับผู้ใช้คนใดคนหนึ่งโดยเฉพาะ
  • การให้อำนาจอาจมีได้สองความหมาย คือกระบวนการมอบสิทธิ์ให้ผู้ใช้ทำบางอย่างได้ และกระบวนการตรวจสอบสิทธิ์นั้น
  • "access control" อาจหมายถึงการควบคุมการเข้าถึงขณะรันไทม์ เป็นสิ่งที่แอปพลิเคชันทำหลังจากยืนยันตัวตนผู้ใช้แล้ว
  • "authN" และ "authZ" เหมาะสมและเป็นที่เข้าใจกันดีอยู่แล้ว การให้อำนาจเกี่ยวข้องกับการเชื่อมโยงระหว่างสิทธิ์กับผู้ใช้อยู่เสมอ