Objetivo: permitir que un usuario se autentique con Facebook en una aplicación de iOS que requiere acceso a un servicio web protegido que estoy ejecutando.
Suposiciones: existe un sistema de autenticación (y registro) nativo para aquellos usuarios que optan por no usar Facebook para iniciar sesión.
Detalles:
- Supongamos que queremos ofrecer la opción para que un usuario inicie sesión con Facebook sin crear una cuenta / credencial separada para nuestro sistema.
- Debido a que admitimos nuestro propio mecanismo de autenticación nativo (nombre de usuario y contraseña), tenemos nuestras propias ID de usuario y emitimos un token de autenticación que se utiliza para las interacciones posteriores después de la validación de credencial inicial.
Me sorprende que Facebook no tenga las mejores prácticas para esto en su documentación para desarrolladores. Toda la documentación existente supone que está incorporando la autenticación FB en un sitio web o una aplicación móvil independiente sin servicio que requiera autenticación.
Aquí están mis pensamientos iniciales sobre cómo se diseñaría esto, pero quiero validar si es correcto.
- El cliente muestra el inicio de sesión de Facebook iOS
- El usuario de la interfaz de usuario inicia sesión con credenciales de Facebook y obtiene token de acceso
- La aplicación iOS pasa el token de acceso a nuestro servidor
Nuestro servidor se comunica con la API de gráficos FB utilizando el token de acceso para (a) validar el token y (b) obtener la ID de usuario de FB para ese token de acceso.
por ejemplo, nuestro servidor llamaría a https://graph.facebook.com/me/?access_token=XYZ que devolvería información de perfil en un objeto JSON
Suponiendo que sea válido, nuestro servidor extrae la ID de usuario del objeto JSON y verifica si el usuario ya tiene una cuenta. Si es así, emitimos nuestro propio boleto de autenticación al cliente para usar en esa sesión. Si el usuario no tiene una cuenta, creamos una nueva con la ID de usuario de Facebook, asignamos nuestra propia ID de usuario única y emitimos nuestro ticket de autenticación.
- El cliente luego devuelve el ticket de autenticación en las interacciones posteriores que necesitan autenticación.
Este parece ser el enfoque correcto para mí, pero no estoy seguro de si me estoy perdiendo algo increíblemente básico y estoy yendo por el camino equivocado (complicado).