มันมีอยู่ 4 กรณีที่จะทำให้ Access token ที่อยู่บนฝั่ง client หมดอายุครับ
- เป็นไปตามเงื่อนไข expires time ซึ่งค่าปรกติจะอยู่ที่ 2 ชั่วโมง
- ผู้ใช้งานเปลี่ยนรหัสผ่าน
- ผู้ใช้งานทำการ de-authorizes ตัวแอ็พ
- ผู้ใช้งานล็อกเอาท์จากระบบ
แต่มันเป็นการเปลี่ยน token บนฝั่ง client เท่านั้น
เพราะโดยปรกติแล้วมันจะมีการดำเนินการ 3 ส่วนก็คือ client, server, facebook
เงื่อนไข 4 ข้อแรกเป็นเพียง short live token เท่านั้น แต่เมื่อมีการผ่านตัวกลางคือ server ทาง server ก็จะส่ง access token ไปยัง facebook อีกที หลังจากนั้นทาง facebook ก็จะทำการสร้าง long lived token เพื่อส่งกลับมายัง server(ทาง server ก็ทำการเก็บ long lived token ไว้บนฐานข้อมูล) และ long lived token ก็จะส่งกลับไปยัง client เพื่อใช้งานบนเว็บฝั่ง client ได้ตามปรกติ และตัว long lived token นี้ก็สามารถส่งไปยังฝั่ง client หรือส่งไปยัง facebook ได้โดยตรงเช่นกัน
หรือจะทำการใช้ API calls จากฝั่ง client วิ่งผ่าน proxy ไปก็ได้
หรือจะให้ server ใช้ token เก่า ส่งตรงไปขอให้ทาง facebook สร้างโค้ดแล้วส่งกลับไปฝั่ง client เพื่อสร้าง long lived token ใหม่ก็ได้อีกฯลฯ
อาจไม่ได้ละเอียดนะครับ เพราะถ้าว่ากันโดยละเอียดนั้นยังมีการใช้งานในแบบอื่นๆ ได้อีกพอสมควรเลย รอท่านผู้รู้ท่านอื่นๆ มาให้ความรู้นะครับ
- Expires Time ของแอพดังๆไม่มีวันหมดอายุ
- เปลี่ยนรหัสผ่านปกติไม่ทำให้ Toket เสีย ถ้าแจ้งบัญชีโดนแฮกถึงจะเสีย
- ถูกต้อง
- ไม่เกี่ยวกันครับ
Access Token คืออะไร? ทำไมพูดถงกันบ่อยนัก? Access Token เปรียบสเหมือนรหัสผ่านที่ใช้แทนรหัสผ่านจริงๆ เข้า Login เพื่อใช้งาน API ดังนั้น Access token ไม่มีทั้งผั่ง Client Server หรืออะไรทั้งนั้น
Client อย่างที่รู้ๆกันว่าคือส่วนติดต่อกับผู้ใช้ อาจจะได้ยินบ่อยในชื่อ UI หรือ GUI
วิธีการรับ Access Tokenแสดงความจำนงว่าต้องการใช้งาน Access Token ด้วยการรีไดเร็คส่งเรื่องให้ Facebook ตัว Facebook จะทำการตรวจสอบว่าลิ้งส่งกลับ Access Token นั้น เป็นลิ้งที่ถูกเพิ่มไว้ใน Facebook Developer หรือไม่
จากนั้น Facebook จะถามๆ ถ้าไม่อ่าน หรือรับไปไม่คิด แน่นอนว่ามีปัญหาตามมา จากนั้น Facebook จะส่งกลับ Access Token เป็นลิ้งตัวแปร GET กลับมาในตัวแปรที่ชื่อว่า access_token แล้วจึงนำ Access Token ไปใช้งานในสิทธิ์ต่างๆตามที่ผู้ใช้อนุญาต
การใช้งาน Access TokenAccess Token มีความสำคัญมากกับการเชื่อมต่อกับ Facebook API เนื่องมันเปรี่ยบสเหมือนรหัสผ่าน การนำ Access Token ไปใช้งาน ง่ายมากครับ มีหลายวิธี ประมาณ 3 - 4 วิธี ตามที่ Facebook Developer ระบุไว้ แต่วิธีที่นิยมใช้มากที่สุด คือ Facebook Graph API
ผมขอยกตัวอย่างโค้ดที่ใช้ดึงโพสเจ้าของ Access Token ตามนี้ครับ
<?Php
$accesstoken = ''; // You Access Token
$url = "https://graph.facebook.com/me/posts?access_token={$accesstoken}";
// cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$content = curl_exec($ch);
curl_close($ch);
$ar = json_decode($content, true);
var_dump($ar);
ถ้าแก้ไขตัวแปร $accesstoken แล้วนำโค้ดไปรัน จะได้รายละเอียดของโพสออกมาในรูป Array ครับ
ต่อมา หากใครใช้สคริปผม (ที่เขียนไว้ดีมาก) จะเจอปัญหากวนใจอย่าง
เอาละสิครับ ปัญหานี้ทำให้ผมกุมขมับไปครึ่งวัน จากนั้นก็ทำใจได้ครับ ต้นตอของปัญหานี้ไม่ได้มาจากผมแต่อย่างใด แต่มาจากตัว Facebook Developer ได้ทำการเพิ่มฟิวเจอร์ให้ตรวจสอบ IP ที่ใช้การใช้งาน Access Token ลงไป
ทำให้ Access Token นั้นมีปัญหา ใช้งานไม่ได้ หากในช่อง Server IP Whitelist ไม่มีการเพิ่ม IP ของเซิฟเวอร์ลงไป
จะแก้ไขปัญหานี้ยังไง?ณ ตอนนี้ แอพของ Microsoft ยังไม่รู้ตัว หรือยังไม่ได้อัพเดทหรือยังไงก็ไม่ทราบ แต่แอพของ Microsoft ยังใช้งานได้อยู่ครับ
แต่ถัดไปอีกซัก 2 - 3 หรือ 1 เดือน แน่นอนว่าทั้งโลกจะได้รับอัพเดท จะจะถูกประกาศออกมาเป็นทางการ หลังจากนั้นก็บอกลาธุรกิจเพิ่มไลค์ใช้ Access Token ได้เลย
สร้างแอพเองไม่ได้หรอ?โดนแบนใน 10 นาทีครับ ถ้าต้องการสร้างเองจริงๆ ควรจะทำอย่างไรก็ได้ให้มีแอกเค้า Facebook สร้างใหม่ และสร้าง App ตลอดเวลา รวมถึงโดเมนด้วยเช่นกันครับ (การโดนแบนแอพจากโดเมนเดิมซ้ำๆ โดเมนจะโดนแบนด้วย)