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?
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.
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.
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.
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ê
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.
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
21
Observe que agora o Facebook está preterindo a permissão offline_access em favor de tokens para os quais você pode solicitar uma "atualização" até o vencimento. Agora, eu mesmo estou lidando com isso, então não tenho muito mais a dizer, mas este documento pode ajudar:
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.
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.
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
6
desde que tive o mesmo problema - veja o excelente post sobre este assunto de ben biddington, que esclareceu todos esses problemas com o token errado e o tipo certo para enviar as solicitações.
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.
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.
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.
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.
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
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.
Respostas:
Depois de cavar um pouco, achei isso. Parece ser a resposta:
Atualizado (11 / abril / 2018)
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/
fonte
Tente isso pode ser que vai ajudar completo para você
Para obter o token de acesso vitalício, é necessário usar
scope=offline_access
O significado de
scope=offline_access
é que: -fonte
Observe que agora o Facebook está preterindo a permissão offline_access em favor de tokens para os quais você pode solicitar uma "atualização" até o vencimento. Agora, eu mesmo estou lidando com isso, então não tenho muito mais a dizer, mas este documento pode ajudar:
https://developers.facebook.com/docs/offline-access-deprecation/
fonte
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.
fonte
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.
fonte
desde que tive o mesmo problema - veja o excelente post sobre este assunto de ben biddington, que esclareceu todos esses problemas com o token errado e o tipo certo para enviar as solicitações.
http://benbiddington.wordpress.com/2010/04/23/facebook-graph-api-getting-access-tokens/
fonte
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/
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.
fonte
Pressione essa tecla para trocar um token de acesso de curta duração por um de longa duração / sem validade (páginas):
fonte
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.
fonte
Básico, o token do facebook expira em uma hora. Mas você pode usar o token 'exchange' para obter um token de vida longa https://developers.facebook.com/docs/facebook-login/access-tokens
fonte
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.
fonte
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 ...
fonte
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.
fonte