Objetivo: permitir que um usuário se autentique com o Facebook em um aplicativo iOS que exija acesso a um serviço da Web protegido em execução.
Pressupostos: existe um sistema de autenticação (e registro) nativo para os usuários que optam por não usar o Facebook para fazer login.
Detalhes:
- Suponha que queremos oferecer a opção de um usuário entrar no Facebook sem criar uma conta / credencial separada para o nosso sistema.
- Como suportamos nosso próprio mecanismo de autenticação nativo (nome de usuário e senha), temos nossos próprios IDs de usuário e emitimos um token de autenticação que é usado para interações subseqüentes após a validação inicial da credencial.
Estou surpreso que o Facebook não tenha as melhores práticas para isso na documentação dos desenvolvedores. Toda a documentação existente está assumindo que você está criando a autenticação do FB em um site ou um aplicativo móvel autônomo sem serviço que exija autenticação.
Aqui estão meus pensamentos iniciais sobre como isso seria projetado, mas quero validação sobre se está correto.
- Cliente abre o login do Facebook no iOS
- O usuário da interface do usuário faz login com credenciais do Facebook e obtém o token de acesso
- O aplicativo iOS passa o token de acesso ao nosso servidor
Nosso servidor conversa com a API gráfica do FB usando o token de acesso para (a) validar o token e (b) obter o ID do usuário do FB para esse token de acesso.
Por exemplo, nosso servidor chamaria https://graph.facebook.com/me/?access_token=XYZ, que retornaria informações de perfil em um objeto JSON
Supondo que seja válido, nosso servidor extrai o ID do usuário do objeto JSON e verifica se o usuário já possui uma conta. Nesse caso, emitimos nosso próprio tíquete de autenticação ao cliente para usar nessa sessão. Se o usuário não tiver uma conta, criamos uma nova com o ID do usuário do Facebook, atribuímos nosso próprio UserID e emitimos nosso tíquete de autenticação.
- O cliente passa o tíquete de autenticação novamente nas interações subseqüentes que precisam de autenticação.
Parece a abordagem certa para mim, mas não tenho certeza se estou perdendo algo insanamente básico e seguindo o caminho errado (complicado).