Saturday 2 June 2012

OAuth The Valet Key for The Web

รถหรูราคาแพงหลายๆยี่ห้อมักจะมาพร้อมกับกุญแจพิเศษที่เรียกว่า Valet Key ซึ่งมีไว้เพื่อให้พนักงานรับรถ คอยนำรถไปจอด ซึ่งคุณสมบัติของ Valet Key นี้ แตกต่างกุญแจปกติ คือจะสามารถใช้ขับรถได้ในระยะทางที่สั้นๆเพื่อเพียงพอสำหรับการจอดรถเท่านั้น ไม่สามารถขับไปไกลๆได้ ซึ่งถือว่าเป็นแนวคิดที่ฉลาดมาก คือมีกุญแจอีกดอกหนึ่งที่มีความสามารถจำกัดเพื่อไว้สำหรับให้คนอื่นนำรถไปจอดให้ ในขณะที่กุญแจอีกดอกหนึ่งมีไว้สำหรับเจ้าของซึ่งเป็นกุญแจปกติ สามารถควบคุมความสามารถของรถได้ทุกอย่าง

ในขณะที่บริการต่างๆบน Web มีปริมาณเพิ่มขึ้นเรื่อยๆ เราจะเห็นการใช้บริการข้ามกันระหว่าง Web หนึ่งไปยังอีก Web หนึ่งอย่างมากมายจนถือเป็นเรื่องปกติในยุคปัจจุบัน หรือที่เรียกกันว่ายุคแห่ง Cloud Computing ยกตัวอย่างเช่น Website ที่ให้บริการ Photo Printing ก็จะมีการเรียกใช้บริการของ Flickr เพื่อขอดึงรูปของลูกค้าตนเองเพื่อนำออกมา Print , Web Social Network ต่างๆ มีการเรียกใช้งานบริการของ Google Address Book เพื่อใช้หาเพื่อน หรือใช้ในการแนะนำเพื่อนให้มาสมัครใช้บริการ เป็นต้น
แต่ปัญหามีอยู่ว่า การที่แต่ละ Application จะเข้าไปดึงข้อมูลของ User ในแต่ละบริการได้นั้น Application ดังกล่าว จะมีการขอ Username และ Password จาก User ซึ่งถือว่าไม่ปลอดภัยเป็นอย่างยิ่ง เพราะเหมือนเป็นการให้ Password แก่คนแปลกหน้า และยิ่งไปกว่านั้น Password ที่ให้ไป โดยส่่วนมากก็มักจะเป็น Password เดียวกันกับที่เราใช้งานบนระบบ Online Banking หรือใช้กับ Website อื่นๆ นอกจากนั้นการให้ ยังถือว่าเป็นการให้สิทธิ์แบบไม่จำกัด เพราะ Application ที่ได้ Password จากเราไป จะสามารถไปทำอะไรก็ได้ในนามของเรา รวมไปถึงแอบเปลี่ยน Password และก็ยึด Account ของเราในที่สุด

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

ยกตัวอย่างเช่น User (resource owner) สามารถให้สิทธิ์แก่ Photo Printing Service (client) ในการดึงข้อมูลรูปของตัวเองที่เก็บไว้บน Photo Sharing Service (server) โดยแทนที่จะให้ Username กับ Password แก่ Photo Printing Service โดยตรง User จะทำการ Login ไปที่ Photo Sharing Service ด้วยตนเองเพื่อขอให้ Photo Sharing Service สร้าง Key ชั่วคราวสำหรับการเข้าใช้ข้อมูลของ User แก่ Photo Printing Service

หวังว่าบทความนี้น่าจะเป็นแนวทางเริ่มต้นที่ดีสำหรับการศึกษาเจาะลึกในเรื่องของ OAuth อย่างจริงจัง สำหรับผู้ที่อยู่ในแวดวง IT นั้น หลีกเลี่ยงไม่ได้ที่จะต้องทำความเข้าใจ OAuth เพราะหนีไม่พ้นแน่นอนครับ อย่าง Twitter API เมื่อก่อนใช้แบบ Basic Authen (เป็นการส่ง Username/Password ผ่านทาง HTTP Header) ปัจจุบันก็เลิกใช้งานไปแล้ว เปลี่ยนมาใช้ OAuth แทน สำหรับ Facebook Application ต่างๆ ที่เราคุ้นเคยกันดี ก็เป็นตัวอย่างที่ดีของการใช้งาน OAuth จะเห็นได้ว่าแนวโน้มนับจากนี้ไป Application ที่อยู่ๆจะมาขอ Username/Password จากเราง่ายๆ คงจะไม่ค่อยมีให้เห็นกันแล้ว

แหล่งที่มา: http://hueniverse.com/oauth/guide/intro/

No comments:

Post a Comment