- คำว่า "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 ความคิดเห็น
ในหมู่นักพัฒนา การใช้
authn,authzแทน auth และใช้login,permissionในเอกสารหรือคอนโทรลเลอร์/ฟาซาดที่มีจุดสัมผัสกับผู้ใช้นั้นถือว่าเห็นด้วยได้ แต่ถ้าจะถึงขั้นเลิกใช้authn,authzไปเลย ก็รู้สึกว่าไม่ถึงกับจำเป็นขนาดนั้นตามที่บทความชี้ไว้ คำว่า auth ถูกใช้แบบกำกวมทั้งในความหมายของการยืนยันตัวตนและการกำหนดสิทธิ์ จึงทำให้สับสนอยู่เหมือนกันครับ การแยกคำออกโดยใช้คำที่ทั่วไปมากขึ้นเพื่อสื่อสารกับคนนอกสายงาน ไม่ใช่แค่นักพัฒนาเพียงอย่างเดียว ก็ดูเป็นความพยายามที่เหมาะสมครับ
ถ้าปัญหาคือทั้ง Authentication และ Authorization ต่างก็ย่อเป็น Auth ได้ทั้งคู่
ผมว่าตามที่กล่าวไว้ในเนื้อหา ใช้ Authn กับ Authz ก็น่าจะเพียงพอแล้วนะ...
ถ้ายังคิดว่ายังไม่ชัดเจน จะขยายเพิ่มอีกหน่อยเป็น Authenty กับ Authory ก็คงได้เหมือนกันครับ
ระบบสิทธิ์ก็ยังมีทั้งแบบ permission และแบบ ACL แล้วถ้างั้นจะจำแนกกันยังไงล่ะ..?
รู้สึกเหมือนฝืน ๆ อยู่นะ...
น่าจะเป็นความพยายามเพื่อลดต้นทุนในการสื่อสารกับทีมที่ไม่ใช่นักพัฒนามากกว่า แต่ก็ดูเยอะเกินไปนิดหน่อย
ไม่ได้ตั้งใจรวมสองอย่างเข้าด้วยกันแล้วเรียกว่า auth หรอกหรือ?
มีทั้ง Authentication และ authorization แล้วทำไมถึงต้องใช้...
ความคิดเห็นจาก Hacker News