我在尝试使用Facebook的Oauth 2.0授权,并想知道Facebook发放的访问令牌是否会过期。如果会过期,是否有请求长期访问令牌的方法?
我在尝试使用Facebook的Oauth 2.0授权,并想知道Facebook发放的访问令牌是否会过期。如果会过期,是否有请求长期访问令牌的方法?
经过一番搜索,我找到了答案。以下是答案:
更新 (2018年4月11日)
offline_access: 允许您的应用程序随时代表用户执行授权请求。 默认情况下,大多数访问令牌在短时间内过期,以确保应用程序仅在用户积极使用应用程序时代表用户发出请求。 此权限使我们的OAuth终点返回的访问令牌具有长寿命。
这是一个请求的权限值。
http://developers.facebook.com/docs/authentication/permissions
更新
offline_access权限已经被删除了一段时间。
https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/
你可以尝试这个,也许会对你有所帮助。
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/
为获取终身访问令牌,您需要使用scope=offline_access
。
scope=offline_access
的含义是:https://developers.facebook.com/docs/offline-access-deprecation/
我和提问者有着相同的问题,但是建议使用offline_access的答案让我产生了警惕。
从安全角度来看,获取用户 Facebook 帐户的离线访问权限与仅使用 Facebook 进行单点登录相比质量上不同且更加强大,并且不应轻易使用(除非你真的需要它)。当用户授权此权限时,“应用程序”可以随时随地检查用户帐户。 我在引号中放置“应用程序”,因为实际上可以使用具有凭据的任何工具 - 您可以编写一整套与 Web 服务器无关的工具,可以访问用户同意共享的任何信息。
我不会使用此功能来解决短令牌寿命问题;这不是其预期用途。实际上,令牌生存期本身就是一项安全功能。我仍在寻找有关这些令牌的正确使用方式的详细信息(我可以将它们持久化吗?我该如何/应该如何保护它们?Facebook 是否嵌入了 OAuth 2.0 的“刷新令牌”在主令牌中?如果没有,在哪里以及/或如何刷新?),但我很确定 offline_access 不是正确的方式。
是的,它们会过期。与“access_token”一起传递的“expires”值,据我所知,大约为2小时。我一直在搜索,但我没有找到请求更长过期时间的方法。
因为我也遇到了同样的问题 - 可以参考本·比丁顿在此主题上的卓越帖子,他澄清了所有这些关于错误令牌和请求发送的正确类型的问题。
http://benbiddington.wordpress.com/2010/04/23/facebook-graph-api-getting-access-tokens/
点击此按钮,将一个短期访问令牌转换为长期/不过期(页面)的访问令牌:
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
登录Facebook账户并编辑您的应用设置(账户->应用程序设置->使用您的帐户的附加权限)。 取消选中权限(访问我不使用应用程序时的数据(offline_access))。然后,当您登录应用程序时,Facebook会发布一个新令牌。
GET /oauth/access_token?
grant_type=fb_exchange_token&
client_id={app-id}&
client_secret={app-secret}&
fb_exchange_token={short-lived-token}