Os tokens de acesso do Facebook Oauth 2.0 expiram?


124

Estou brincando com a autorização do Oauth 2.0 no Facebook e queria saber se os tokens de acesso que o Facebook passará a expirar. Em caso afirmativo, existe uma maneira de solicitar um token de acesso de longa duração?


4
Para adicionar alguns detalhes a esta pergunta: até o acesso offline_ é invalidado quando o usuário altera sua senha do Facebook. Portanto, é melhor jogar com segurança e obter novamente um novo token de acesso se você receber erros ao usar o antigo.
Hoàng Long

2
Para adicionar a referência: developers.facebook.com/blog/post/500
Hoàng Long

2
pessoal, vocês todos simplesmente arrasam. Seja qual for a pergunta, eu apenas resolvi-a ... Obrigado a todos #
vinay

3
Parece que o Facebook está preterindo a permissão offline_access em 1º de maio. No futuro, todos os tokens de acesso expirarão quando o "tempo de expiração" (60 dias) acabar, o usuário alterar sua senha, desautorizar o aplicativo ou desconectar o usuário. API . PS: Não sei por que o Facebook está definindo o novo "tempo de expiração" para 60 dias se os tokens de acesso ainda expiram nos logouts (parece que os usuários tendem a sair bem dentro de 60 dias). Talvez eu estou faltando alguma coisa ... expiração
Steven Wexler

1
O comportamento do access_token está mudando agora. Você deve consultar as "Breaking Changes" de julho de 2012 - a permissão offline_access está sendo preterida e o access_token terá um longo ciclo de vida.
Qodeninja

Respostas:


64

Depois de cavar um pouco, achei isso. Parece ser a resposta:

Atualizado (11 / abril / 2018)

  • O token expirará após cerca de 60 dias.
  • O token será atualizado uma vez por dia, por até 90 dias, quando a pessoa que estiver usando seu aplicativo fizer uma solicitação aos servidores do Facebook.
  • Todos os tokens de acesso precisam ser renovados a cada 90 dias com o consentimento da pessoa que usa seu aplicativo.

Anúncio de alteração do Facebook (04/04/2018)

Página de vencimento atualizada do token do Facebook (04/04/2018)

offline_access: permite que seu aplicativo execute solicitações autorizadas em nome do usuário a qualquer momento. Por padrão, a maioria dos tokens de acesso expira após um curto período de tempo para garantir que os aplicativos façam solicitações apenas em nome do usuário quando o estiver usando ativamente. Essa permissão faz com que o token de acesso retornado por nosso terminal OAuth tenha vida longa.

É um valor de permissão solicitado.

http://developers.facebook.com/docs/authentication/permissions

ATUALIZAR

A permissão offline_access foi removida há um tempo atrás.

https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/


2
Em resposta a isso, iniciei uma biblioteca de código aberto que pode ser útil para vocês. É uma biblioteca oAuth que visa apoiar todas as redes sociais com implementações oAuth. Ele já suporta permissões estendidas, incluindo postagem offline. code.google.com/p/socialoauth
Tendrid

Até os tokens offline_access expiram se o usuário alterar sua senha no Facebook.
Bemmu

Infelizmente, não é uma solução "limpa" para o problema em questão. Primeiro ou todos os que solicitam essa permissão alertam o usuário para uma permissão adicional (por exemplo, este aplicativo poderá acessar sua conta do Facebook a QUALQUER MOMENTO), o que desativa muitos clientes em potencial. Segundo, se o uso alterar sua senha, esse token não será válido. Portanto, é preciso haver uma maneira melhor (por exemplo, atualizar o token) para obter um novo access_token, especialmente para aplicativos da Web orientados a ajax com rich client.
Vladimir

24
De acordo com a documentação da API, offline_access não será mais suportado a partir de 2 de maio de 2012.
Ben Lesh

@Tendrid Sua biblioteca suporta apenas o Facebook e o Twitter.
Mareoraft 30/10

30

Tente isso pode ser que vai ajudar completo para você

https://graph.facebook.com/oauth/authorize?
    client_id=127605460617602&
scope=offline_access,read_stream,user_photos,user_videos,publish_stream&
    redirect_uri=http://www.example.com/

Para obter o token de acesso vitalício, é necessário usar scope=offline_access

O significado de scope=offline_accessé que: -

Permite que seu aplicativo execute solicitações autorizadas em nome do usuário a qualquer momento. Por padrão, a maioria dos tokens de acesso expira após um curto período de tempo para garantir que os aplicativos façam solicitações apenas em nome do usuário quando o estiver usando ativamente. Essa permissão faz com que o token de acesso retornado por nosso terminal OAuth tenha vida longa.

Porém, de acordo com a futura atualização do facebook, a funcionalidade offline_acees ficará obsoleta para sempre a partir de 3 de outubro de 2012. e o usuário receberá um token de acesso de 60 dias e antes da expiração do token de acesso que o Facebook notificará ou você poderá obter seu costume funcionalidade de notificação buscando o valor de expiração da API do Facebook.


10
Gostaria de informar que o fb mudou em sua API e agora nenhum token de tempo de vida está disponível. Agora, o acesso offline ficará ativo por 60 dias.
PrateekSaluja


17

Eu vim aqui com a mesma pergunta que o OP, mas as respostas sugerindo o uso do offline_access estão levantando sinalizadores para mim.

Em termos de segurança, obter acesso offline à conta do Facebook de um usuário é qualitativamente diferente e muito mais poderoso do que apenas usar o Facebook para logon único e não deve ser usado de ânimo leve (a menos que você realmente precise). Quando um usuário concede essa permissão, "o aplicativo" pode examinar a conta do usuário de qualquer lugar a qualquer momento. Coloquei "o aplicativo" entre aspas, porque na verdade é qualquer ferramenta que possua credenciais - você pode criar um conjunto de ferramentas que não têm nada a ver com o servidor da web que pode acessar as informações que o usuário concordou em compartilhar com aqueles credenciais.

Eu não usaria esse recurso para solucionar uma vida útil curta do token; esse não é o seu objetivo. De fato, a vida útil do token em si é um recurso de segurança. Ainda estou procurando detalhes sobre o uso adequado desses tokens (posso persistir? Como protegê-los / devo protegê-los? O Facebook incorpora o "token de atualização" do OAuth 2.0 dentro do principal? Caso contrário, onde e / ou como atualizo?), mas tenho certeza de que offline_access não é o caminho certo.


1
mesmas dúvidas aqui david. você encontrou mais informações sobre como proteger tokens armazenados para acesso offline?
Neal aise

Os documentos do Facebook são terríveis, mas acho que é razoavelmente seguro manter os tokens de acesso NÃO adquiridos com o offline_access. Embora seja verdade que qualquer pessoa que tenha acesso a ele (enquanto o usuário do FB ainda estiver logado) pode fazer qualquer coisa pela qual o usuário tenha concedido sua permissão, não é tão ruim, pois os tokens são invalidados assim que o usuário sai do facebook qualquer lugar. Ainda é uma falha de segurança (acho estranho que você não precise fornecer seu segredo de aplicativo nas solicitações / me), mas não é aberto. Se alguém gritar assim, fique à vontade para me corrigir.
David Pope

8

Sim, eles expiram. Há um valor 'expirar' que é passado junto com o 'access_token', e pelo que posso dizer, são cerca de 2 horas. Estive pesquisando, mas não vejo uma maneira de solicitar um prazo de validade mais longo.


3
Se você solicitar a permissão 'offline_access', o token não expirará.
Brendan Berg

1
@Brendan: Mas será invalidado assim que o usuário alterar sua senha do Facebook
Hoàng Long

@ HoàngLong alguma referência a isso?
Charles Prakash Dasari


4

Você sempre pode atualizar o token de acesso do usuário toda vez que o usuário fizer login no seu site através do facebook. O acesso offline não pode garantir que você obtenha um token de acesso ao longo da vida, o token de acesso muda sempre que o usuário revoga o acesso ao aplicativo ou o usuário altera sua senha.

Citado em facebook http://developers.facebook.com/docs/authentication/

Nota: Se o aplicativo não solicitou a permissão offline_access, o token de acesso é limitado pelo tempo. O token de acesso com limite de tempo também é invalidado quando o usuário sai do Facebook. Se o aplicativo tiver obtido a permissão offline_access do usuário, o token de acesso não terá validade. No entanto, ele é invalidado sempre que o usuário altera sua senha.

Suponha que você armazene o uid do facebook e o token de acesso do usuário em uma tabela de usuários em seu banco de dados, toda vez que o usuário clicar no botão "Login com facebook", verifique o status do login usando a API Javascript do facebook e examine o status da conexão a partir da resposta , se o usuário tiver se conectado ao seu site, você poderá atualizar o token de acesso na tabela.


3

Pressione essa tecla para trocar um token de acesso de curta duração por um de longa duração / sem validade (páginas):

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

1

entre na conta do facebook e edite as configurações do seu aplicativo (conta -> configuração do aplicativo -> permissão adicional do aplicativo que usa sua conta). desmarque a permissão (acesse meus dados quando não estiver usando o aplicativo (offline_access)). Em seguida, o face registrará a emissão de um novo token ao fazer login no aplicativo.



0

verifique o seguinte ao interagir com a API do gráfico do facebook.

1) O URL de conexão do aplicativo deve ser a base do seu URL de conexão "redirect_uri": - www.x-minds.org/fb/connect/ redirect_uri - www.x-minds.org/fb/connect/redirect 2) Seu "redirect_uri "deve ser o mesmo nos dois casos (quando você solicita um código de verificação e solicita um access_token) redirect_uri - www.x-minds.org/fb/connect/redirect 3), você deve codificar o argumento ao solicitar um access_token 4) não deve passar o argumento (tipo = client_cred) quando você solicita um access_token. o servidor de autorização emitirá um token sem parte da sessão. não podemos usar esse token com o alias "me" na API do gráfico. Este token terá um comprimento de (40), mas um token com parte da sessão terá um comprimento de (81). Um token de acesso sem parte da sessão funcionará com alguns casos

por exemplo: - https://graph.facebook.com/ ? access_token = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM. Mas a API do Graph com o alias "me" funcionará apenas com token com parte da sessão.


0

Não sei quando exatamente os tokens expiram, mas o fazem, caso contrário, não haveria uma opção para conceder permissões offline.

De qualquer forma, às vezes exigir que o usuário dê permissões offline é um exagero. Dependendo das suas necessidades, talvez seja suficiente que o token permaneça válido enquanto o site for aberto no navegador do usuário. Para isso, pode haver uma solução mais simples - registrar o usuário periodicamente usando um iframe: facebook auto re-login from cookie php

Trabalhou para mim ...


0

Isso ocorre alguns anos depois, mas o Facebook Graph API Explorer agora possui um pequeno símbolo de informações ao lado do token de acesso que permite acessar o aplicativo da ferramenta de token de acesso e estender o token da API por alguns meses. Pode ser útil durante o desenvolvimento.

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.