OAuth
เนื่องจากช่วงนี้นี้กำลังศึกษา Facebook Graph API อยู่เพื่อทำ AutoFeed project
บังเอิญไปเจอ OAuth เลยสงสัย, วันนี้จะมาอธิบายให้ฟังกันครับ (บทความนี้เป็นทฤษฏีล้วนๆเลยนะครับ)
ปล. ในบทความนี้เราจะเรียกข้อมูลต่างๆของ user ว่า user resource กันนะครับ
OAuth = มาตรฐานในการระบุตัวตน
OAuth = มาตรฐาน การ Authentication แบบนึง
OAuth = authorization framework
OAuth จะอนุญาติให้ client app ได้รับ limited access ในการเข้าถึง user resource บน HTTP
โดยจะเอา user authentication ไปร้องขอกับ server ที่มี resource ของ user นั้นๆ
เพื่อที่จะทำให้ client app สามารถเข้าถึง user resource ได้ตามที่ร้องขอไว้
อาจจะยังนึกภาพกันไม่ออก ลองนึกภาพ application ที่ให้ login ผ่าน Facebook อะไรแบบนี้ครับ
มันก็เป็นการขอ user resource จาก facebook (resource server) ซึ่งใช้ OAuth ในการระบุตัวตน
มาดูการอธิบายเปนข้อๆ ดีกว่าครับ โดยในบทความนี้จะอธิบายโดยอ้างอิง OAuth 2.0
หลักการทำงานแบบง่ายๆ
ครั้งแรก user -> client app -> authentication server -> resource server
ครั้งต่อๆมา user -> client app -> ใช้ access token ในการเข้าถึง resource server จนกว่า access token จะ expire
หลักการทำงานแบบละเอียด
ยกตัวอย่าง JoJoee Test App
จะขอ permission กับ Facebook ในการเข้าถึง user resource เช่น your public profile, friend list, email address and likes
ของ user
1. user เข้าไปที่ `JoJoee Test App`
user เข้า JoJoee Test App
ใน JoJoee Test App
ก็จะมีปุ่ม “Login via Facebook”
2. `JoJoee Test App` บอกให้ user ทำการ authentication ผ่าน facebook โดยการกดปุ่ม “Login via Facebook”
พอกด ปุ่ม “Login via Facebook” ตัว JoJoee Test App
จะ redirect ไปที่ authenticating application ของ Facebook
3. user กด authentication ผ่าน Facebook
Facebook ก็จะถามว่าจะให้ สิทธิต่างๆที่ application นั้นๆร้องขอหรือไม่
ดังรูปตัวอย่างด้านบน JoJoee Test App
ทำการขอ your public profile, friend list, email address and likes
จากผู้ใช้
คราวนี้ตัว JoJoee Test App ทำการขอ permission manage your Pages, publish as Pages you manage and manage your notifications
ซึ่ง permission รอบนี้เป็น permission ที่นอกเหนือจาก permission พื้นฐานที่ facebook ให้ครับ
4. Facebook ระบุตัวตนแล้วก็จะ redirect ไปยัง `JoJoee Test App1 พร้อมกับ authentication code
authenticating application ของ facebook จะ redirect user ไปที่ redirect url พร้อมกับ authentication code
5. `JoJoee Test App` ได้รับ authentication code
JoJoee Test App
เอา authentication code มารับ access token กับ authenticating application ของ Facebook อีกรอบ
6. Facebook ส่ง access token มาให้ `JoJoee Test App`
เมื่อ JoJoee Test App
ได้รับ access token มาตัว JoJoee Test App
ก็สามารถทำอะไรก็ได้แล้วครับ
ตาม permission ที่ขอมาแล้วครับเช่น ขอค่า email, publish status, จัดการ page ต่างๆของ user