Mục tiêu: Cho phép người dùng xác thực với Facebook vào ứng dụng iOS yêu cầu quyền truy cập vào dịch vụ web được bảo vệ mà tôi đang chạy.
Giả định: Có một hệ thống xác thực (và đăng ký) gốc dành cho những người dùng chọn không sử dụng Facebook để đăng nhập.
Chi tiết:
- Giả sử chúng tôi muốn cung cấp tùy chọn cho người dùng đăng nhập bằng Facebook mà không cần tạo tài khoản / thông tin đăng nhập riêng cho hệ thống của chúng tôi.
- Vì chúng tôi hỗ trợ cơ chế xác thực riêng của chúng tôi (tên người dùng và mật khẩu), chúng tôi có ID người dùng của riêng mình và cấp mã thông báo xác thực được sử dụng cho các tương tác tiếp theo sau khi xác thực thông tin ban đầu.
Tôi ngạc nhiên rằng Facebook không có các thực tiễn tốt nhất cho điều này trong tài liệu dành cho nhà phát triển của họ. Tất cả các tài liệu hiện có đều giả sử bạn đang xây dựng FB auth vào một trang web hoặc một ứng dụng di động độc lập không có dịch vụ yêu cầu xác thực.
Đây là những suy nghĩ ban đầu của tôi về cách nó sẽ được thiết kế nhưng muốn xác nhận xem nó có đúng không.
- Khách hàng bật đăng nhập Facebook iOS
- UI Người dùng đăng nhập bằng thông tin đăng nhập Facebook và nhận mã thông báo truy cập
- Ứng dụng iOS chuyển mã thông báo truy cập đến máy chủ của chúng tôi
Máy chủ của chúng tôi nói chuyện với API đồ thị FB bằng cách sử dụng mã thông báo truy cập để (a) xác thực mã thông báo và (b) lấy ID người dùng FB cho mã thông báo truy cập đó.
ví dụ: máy chủ của chúng tôi sẽ gọi https://graph.facebook.com/me/?access_token=XYZ sẽ trả về thông tin hồ sơ trong một đối tượng JSON
Giả sử nó hợp lệ, máy chủ của chúng tôi trích xuất ID người dùng từ đối tượng JSON và kiểm tra xem người dùng đã có tài khoản chưa. Nếu vậy, chúng tôi phát hành vé xác thực của riêng mình cho khách hàng để sử dụng cho phiên đó. Nếu người dùng không có tài khoản, chúng tôi sẽ tạo một tài khoản mới với ID người dùng Facebook, gán UserID duy nhất của riêng chúng tôi và cấp vé xác thực của chúng tôi.
- Sau đó, khách hàng sẽ trả lại vé xác thực cho các tương tác tiếp theo cần xác thực.
Đây có vẻ là cách tiếp cận đúng với tôi nhưng không chắc chắn liệu tôi có đang thiếu thứ gì đó cực kỳ cơ bản và đi sai đường (phức tạp) không.