เป้าหมาย: อนุญาตให้ผู้ใช้รับรองความถูกต้องกับ Facebook ในแอปพลิเคชัน iOS ซึ่งต้องการการเข้าถึงบริการเว็บที่ได้รับการป้องกันที่ฉันใช้งานอยู่
ข้อสันนิษฐาน: มีระบบการรับรองความถูกต้องดั้งเดิม (และการลงทะเบียน) สำหรับผู้ใช้ที่เลือกที่จะไม่ใช้ Facebook เพื่อลงชื่อเข้าใช้
รายละเอียด:
- สมมติว่าเราต้องการเสนอตัวเลือกให้ผู้ใช้ลงชื่อเข้าใช้ด้วย Facebook โดยไม่ต้องสร้างบัญชี / ข้อมูลรับรองแยกต่างหากสำหรับระบบของเรา
- เนื่องจากเราสนับสนุนกลไกการตรวจสอบความถูกต้องดั้งเดิม (ชื่อผู้ใช้และรหัสผ่าน) เรามี ID ผู้ใช้ของเราเองและออกโทเค็นการตรวจสอบความถูกต้องที่ใช้สำหรับการโต้ตอบที่ตามมา
ฉันประหลาดใจที่ Facebook ไม่มีแนวทางปฏิบัติที่ดีที่สุดสำหรับสิ่งนี้ในเอกสารสำหรับนักพัฒนาซอฟต์แวร์ เอกสารที่มีอยู่ทั้งหมดนั้นสมมติว่าคุณกำลังสร้าง FB auth ไว้ในเว็บไซต์หรือแอพมือถือแบบสแตนด์อโลนที่ไม่มีบริการที่ต้องใช้การตรวจสอบสิทธิ์
นี่คือความคิดเริ่มต้นของฉันเกี่ยวกับวิธีการออกแบบ แต่ต้องการตรวจสอบว่าถูกต้องหรือไม่
- ลูกค้าปรากฏการเข้าสู่ระบบ Facebook iOS
- ผู้ใช้ UI ลงชื่อเข้าใช้ด้วยข้อมูลรับรอง Facebook และเข้าถึงโทเค็น
- iOS App ส่งโทเค็นการเข้าถึงไปยังเซิร์ฟเวอร์ของเรา
เซิร์ฟเวอร์ของเราพูดคุยกับ FB กราฟ API โดยใช้โทเค็นการเข้าถึงเพื่อ (a) ตรวจสอบโทเค็นและ (b) รับ ID ผู้ใช้ FB สำหรับโทเค็นการเข้าถึงนั้น
เช่นเซิร์ฟเวอร์ของเราจะเรียกhttps://graph.facebook.com/me/?access_token=XYZซึ่งจะส่งคืนข้อมูลโปรไฟล์ในวัตถุ JSON
เซิร์ฟเวอร์ของเราแยก ID ผู้ใช้จากวัตถุ JSON และตรวจสอบว่าผู้ใช้มีบัญชีอยู่แล้วหรือไม่ ถ้าเป็นเช่นนั้นเราจะออกตั๋วรับรองความถูกต้องให้กับลูกค้าเพื่อใช้สำหรับเซสชันนั้น หากผู้ใช้ไม่มีบัญชีเราจะสร้างบัญชีใหม่ด้วย ID ผู้ใช้ Facebook กำหนด ID ผู้ใช้เฉพาะของเราเองและออกตั๋วรับรองความถูกต้องของเรา
- จากนั้นลูกค้าจะผ่านตั๋วรับรองความถูกต้องอีกครั้งหลังจากการโต้ตอบที่ต้องการการรับรองความถูกต้อง
ดูเหมือนว่าวิธีการที่เหมาะสมสำหรับฉัน แต่ไม่แน่ใจว่าฉันขาดสิ่งพื้นฐานอย่างเมามันและลงเส้นทางที่ผิด (ซับซ้อน)