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`

OAuth - Facebook step 1
OAuth – Facebook step 1

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

OAuth - Facebook step 3
OAuth – Facebook step 3

Facebook ก็จะถามว่าจะให้ สิทธิต่างๆที่ application นั้นๆร้องขอหรือไม่
ดังรูปตัวอย่างด้านบน JoJoee Test App ทำการขอ your public profile, friend list, email address and likes จากผู้ใช้

OAuth - Facebook step 4
OAuth – Facebook step 4

คราวนี้ตัว JoJoee Test App ทำการขอ permission manage your Pages, publish as Pages you manage and manage your notifications
ซึ่ง permission รอบนี้เป็น permission ที่นอกเหนือจาก permission พื้นฐานที่ facebook ให้ครับ

ตอนกด redirect สังเกตุที่ url ที่ไปยัง facebook จะมี query string พวก client id, client secret, redirect url ด้วย เพื่อเป็นข้อมูลในการ authentication

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