Estou desenvolvendo um aplicativo para iPhone, que é baseado na comunicação com o servidor, e quero usar mecanismos de autenticação do Facebook.
Basicamente, acho que deveria funcionar assim:
- No meu aplicativo para iPhone, o usuário faz login no Facebook, usando seu e-mail e senha.
- O usuário permite o acesso aos seus dados para o aplicativo do Facebook relacionado.
- Meu aplicativo para iPhone recebe o token de acesso, após efetuar login com sucesso.
- Em outras comunicações com meu servidor, meu aplicativo para iPhone deve usar o token de acesso do Facebook recebido (por exemplo: em consultas).
- Quando meu servidor receber alguma consulta do aplicativo do iPhone, com token de acesso, ele deve perguntar ao Facebook que esse token é válido (e para quem) e, em caso afirmativo, o servidor deve assumir que o usuário está autenticado no Facebook.
Minha pergunta é: como o servidor deve perguntar ao Facebook se o token de acesso fornecido é válido? Acho que devo verificar de alguma forma se o token é válido para meu aplicativo do Facebook.
Eu tentei muitas consultas do Facebook para representar graficamente a API, que encontrei, mas nada funcionou como eu esperava. Você pode me dar algum exemplo?
iphone
facebook
authentication
Marcin
fonte
fonte
Respostas:
Este é um processo de duas etapas que você pode usar para validar se um token de acesso do usuário pertence ao seu aplicativo:
1) Gerar um token de acesso de aplicativo
( https://developers.facebook.com/docs/howtos/login/login-as-app/ )
2) Depurar o token de acesso do usuário
( https://developers.facebook.com/docs/howtos/login/debugging-access-tokens/ )
Onde INPUT_TOKEN é o token de acesso do usuário que você deseja verificar e ACCESS_TOKEN é o token do seu aplicativo obtido na etapa 1.
O endpoint de depuração basicamente despeja todas as informações sobre um token, então ele responderá com algo assim:
Se esse token não for de "seu aplicativo", ele retornará uma resposta de erro.
fonte
Presumo que você já tenha o token de acesso em mãos. Nesse caso, a maneira mais simples de validar um token de acesso é emitir a seguinte solicitação
Substitua aqui @accesstoken pelo token de acesso que você possui. Vou detalhar o url e explicar cada um.
Estamos emitindo uma solicitação de API de gráfico aqui que retornará o ID do usuário do Facebook do proprietário do token de acesso como uma string JSON. A palavra-chave 'eu' representa o usuário atualmente conectado ou o proprietário do token de acesso. Para esta solicitação, o token de acesso é um parâmetro obrigatório.
Se o token de acesso fornecido não for válido ou expirado, o Facebook retornará apenas uma mensagem de erro de algum tipo.
Para um token de acesso válido, o resultado será de alguma forma parecido com este
fonte
Outra solução seria usar
https://graph.facebook.com/app/?access_token=[user_access_token]
conforme descrito em Obter id do aplicativo do token de acesso do usuário (ou verificar o aplicativo de origem de um token) .Este parece ser um recurso não documentado, mas retorna JSON contendo a id do aplicativo para o qual o token foi gerado. Se o token não fosse para seu aplicativo, ele retornará 400.
fonte
Na última versão do Facebook (2.2), você pode fazer isso desta forma:
Saída de amostra:
fonte
Você pode baixar o SDK do Facebook para PHP no GitHub .
fonte
Se um usuário passou para você um UID do Facebook que ele afirma ser dele e você deseja verificar se é legítimo, esta é uma função Python que o verificará em relação ao token de acesso (uma implementação da resposta de Robin Jome):
fonte
Este é o único método seguro para verificar o token do usuário usando apenas uma solicitação:
Observe que um sinal "|" no URL acima não é usado como OU, mas como separador e deve estar lá após preencher os outros campos.
A resposta será JSON semelhante a:
Referência: https://developers.facebook.com/docs/facebook-login/access-tokens/#apptokens (o método acima é mencionado no final desta seção)
fonte
Junto com um token de acesso, o Facebook também envia um parâmetro "expires_in", que é um valor de deslocamento. Use isso para calcular quando o token de acesso expirará como um NSDate. Então, quando você precisar fazer uma solicitação, compare a data atual com a data de vencimento.
Além disso, tente inspecionar os códigos de status e as strings de resposta que o Facebook envia de volta.
fonte