Para un escenario de SSO híbrido utilizando Facebook iOS SDK, ¿cuál es la mejor manera de generar una contraseña / key para nuestros propios loggings de usuario personalizados?

Entonces, mi intención es tener un inicio de session en mi aplicación iOS que permita nuestro logging estándar de correo electrónico / disco, o iniciar session con Facebook. También estamos creando services de descanso para get información de la aplicación para un usuario dado, por ejemplo, https: // url / getPosts / [userId]? UserPwd = foo

Ya implementé SSO con fb en una aplicación web, pero tengo algunas dudas sobre la security de la authentication en un escenario de cliente iOS. La diferencia key con respecto a lo que he hecho antes es que en una aplicación web, estaba haciendo un server para llamar a un server a Facebook para get el token de acceso, así que estaba razonablemente seguro de que el usuario estaba autenticado y el server web hizo llamadas privilegiadas la database. En el caso de iOS, tengo la aplicación de cliente mobile que hace la request de authentication de iOS de Facebook en sí misma y el server tiene que de alguna manera confiar en que este usuario de la aplicación del cliente esté autenticado en realidad contra el logging de usuario coincidente en nuestra database.

Mi pregunta es cómo generar una key única duradera y secreta del SDK de iOS para que pueda crear y asociar un logging de usuario coincidente en nuestra database para los usuarios que solo se autentican con Facebook. Quiero que esto sea perfecto para que el usuario no tenga que completar manualmente otro formulario, y simplemente creamos automáticamente este logging de usuario coincidente en nuestra database.

Podría insert un logging en mi propia tabla de usuarios cuando fbDidLogin con Facebook, usando el ID de Facebook como identificador único y el token de acceso fb como la pseudo contraseña / key para mi propio logging de usuario. Tendría que validar el token de acceso con Facebook para asegurarme de que es válido antes de savelo como una contraseña para el usuario (el usuario nunca vería esta contraseña, solo la aprobaría la aplicación del cliente durante las llamadas api). De esta forma, cuando el usuario realiza una llamada a nuestro propio api de descanso a través de la aplicación de iPhone, podemos autenticar y autorizar el uso de este secreto / pwd / key.

Una alternativa que haría que toda esta cuestión fuera discutible es manejar la lógica de autorización en la aplicación del cliente y comprobar que hay una session fb válida antes de hacer llamadas a nuestros propios files que garantizo con solo un solo secreto en toda la aplicación, eso no parece tan seguro ya que get ese secreto le da autorización a los datos de todos los usuarios. Prefiero autorizar a un nivel de usuario individual. ¿Es esa la elección correcta? ¿Estoy siendo paranoico sobre la security de iOS?

El token de acceso fb caduca, por lo que podría no parecer duradero, sin embargo, si habilito el acceso sin connection, ese token no caducará, pero creará una window de dialog o una window de aspecto más aterrador. Una alternativa al token de acceso es hacer un hash al fb Id con una key secreta de aplicación en el cliente iOS, y usar eso como la contraseña del usuario de Facebook en nuestra database. Sin embargo, ¿de nuevo es una sola key secreta que quizás podría comstackrse de forma inversa desde la aplicación de cliente de iOS?

Diseño para la authentication de Facebook en una aplicación de iOS que también accede a un service web seguro

Esta publicación me ayudó a desentrañar más. Si no me equivoco, el flujo es así:

  1. El usuario se autentica en la aplicación iOS
  2. La aplicación iOS toma el token de authentication, lo envía a la aplicación de Rails
  3. La aplicación Rails toma token de authentication y la envía a graph.facebook.com/?auth_token=XXX para recuperar al usuario si la authentication fue exitosa.
  4. La aplicación Rails toma la información del usuario y coincide / crea el usuario en la propia tabla de la database. Envía algún tipo de key de authentication a la aplicación iOS.
  5. La aplicación iOS guarda la key de authentication para que pueda usarla para comunicarse con la aplicación de Rails.

Déjame saber si me falta algo.

¿Has mirado los documentos de iOS para Single Sign On (SSO)? https://developers.facebook.com/docs/guides/mobile/#ios

Puede compartir una ID de aplicación en dispositivos mobilees, lonas y sitios web y la misma authentication de usuario funciona para cada entorno.

Echa un vistazo a: https://developers.facebook.com/docs/authentication/

La Plataforma de Facebook ofrece varias forms de utilizar los flujos de OAuth anteriores en diferentes types de aplicaciones, incluidos sitios web, aplicaciones en Facebook.com, aplicaciones mobilees y de escritorio.

Solo necesita insert la key de Facebook de los usuarios en su database para saber si está autenticada con Facebook. Utilice OAuth en el lado de ios, autentique a los usuarios, tome la key secreta de los usuarios, envíela a su service web de descanso y guárdela con otros usuarios.