我正在Facebook上使用Oauth 2.0授权,并且想知道Facebook传递的访问令牌是否会过期。如果是这样,是否有办法请求长寿命访问令牌?
我正在Facebook上使用Oauth 2.0授权,并且想知道Facebook传递的访问令牌是否会过期。如果是这样,是否有办法请求长寿命访问令牌?
Answers:
经过一番挖掘,我发现了这个。似乎是答案:
更新(11 / April / 2018)
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
是:-
使您的应用程序可以随时代表用户执行授权的请求。默认情况下,大多数访问令牌会在很短的时间后过期,以确保应用程序仅在用户正在积极使用应用程序时才代表用户发出请求。此权限可以使我们的OAuth端点返回的访问令牌长期存在。
但是根据Facebook未来的升级,从2012年10月3日起将永远不赞成使用offline_acees功能。用户将获得60天的长期访问令牌,并且在访问令牌到期之前,Facebook会通知该令牌,或者您可以获取自定义通知功能从Facebook Api获取到期值。
请注意,Facebook现在不赞成使用offline_access权限,而希望使用令牌,您可以请求对其进行“升级”至到期。我本人现在正在处理这个问题,所以我没有更多要说的了,但是此文档可能会有所帮助:
https://developers.facebook.com/docs/offline-access-deprecation/
我来到这里时遇到的问题与OP相同,但答案表明使用offline_access对我来说是一个危险信号。
在安全方面,与仅使用Facebook进行单点登录相比,脱机访问用户的Facebook帐户在质量上有很大不同,并且功能更强大,并且不应轻易使用(除非您真正需要它)。当用户授予此权限时,“应用程序”可以随时随地检查用户的帐户。我将“应用程序”用引号引起来,因为它实际上是具有凭据的任何工具-您可以编写整套与网络服务器无关的工具,这些工具可以访问用户同意分享给他们的任何信息证书。
我不会使用此功能来缩短令牌寿命。那不是它的预定目的。实际上,令牌生存期本身就是一种安全功能。我仍在寻找有关这些令牌的正确用法的详细信息(我可以保留它们吗?如何/应该保护它们?Facebook是否将OAuth 2.0“刷新令牌”嵌入主令牌内?如果没有,它在哪里,以及/或如何刷新?),但是我很确定offline_access是不正确的方法。
是的,它们确实会过期。有一个“ expires”值与“ access_token”一起传递,据我所知大约是两个小时。我一直在搜索,但没有找到请求更长的到期时间的方法。
由于我遇到了同样的问题-请参阅本·比丁顿(Ben biddington)关于该主题的出色文章,他用错误的令牌和正确的类型来澄清所有这些问题以发送请求。
http://benbiddington.wordpress.com/2010/04/23/facebook-graph-api-getting-access-tokens/
每当用户通过facebook登录到您的站点时,您始终可以刷新用户的访问令牌。脱机访问不能保证您获得终身访问令牌,无论何时用户撤消了您的应用程序访问权限或用户更改了密码,访问令牌都会更改。
引用自Facebook http://developers.facebook.com/docs/authentication/
注意:如果应用程序未请求offline_access权限,则访问令牌是有时间限制的。当用户注销Facebook时,有时限访问令牌也会失效。如果应用程序已从用户那里获得offline_access许可,则访问令牌没有到期。但是,每当用户更改密码时,它就会失效。
假设您将用户的facebook uid和访问令牌存储在数据库的用户表中,每次用户单击“使用facebook登录”按钮时,您都使用facebook Javascript API检查登录状态,然后从响应中检查连接状态,如果用户已连接到您的站点,则可以更新表中的访问令牌。
登录Facebook帐户并编辑您的应用程序设置(帐户->应用程序设置->使用您帐户的应用程序的其他许可)。取消选中权限(当我不使用应用程序时访问我的数据(offline_access))。然后,当您登录到应用程序时,face将预订一个新的令牌。
基本而言,facebook令牌将在一个小时内到期。但是您可以使用'exchange'令牌获取长期存在的令牌 https://developers.facebook.com/docs/facebook-login/access-tokens
GET /oauth/access_token?
grant_type=fb_exchange_token&
client_id={app-id}&
client_secret={app-secret}&
fb_exchange_token={short-lived-token}
与facebook graph api交互时,请检查以下内容。
1)应用程序连接URL应该是“ redirect_uri”连接URL的基础:-www.x-minds.org/fb/connect/ redirect_uri-www.x-minds.org/fb/connect/redirect 2)您的“ redirect_uri ”(两种情况下都应相同(当您请求验证码并请求access_token时)redirect_uri-www.x-minds.org/fb/connect/redirect 3),当您请求access_token 4)在请求access_token时不应传递参数(type = client_cred)。授权服务器将发出没有会话部分的令牌。我们无法在图形API中将此令牌与“ me”别名一起使用。该令牌的长度为(40),但是带有会话部分的令牌的长度为(81)。在某些情况下,没有会话部分的访问令牌将适用
如: - https://graph.facebook.com/的access_token = 116122545078207 | EyWJJYqrdgQgV1bfueck320z7MM?但是带有“我”别名的Graph API仅适用于带有会话部分的令牌。
我不知道令牌何时确切到期,但是令牌确实会到期,否则就不会有授予离线权限的选项。
无论如何,有时要求用户授予脱机权限是过大的。根据您的需求,只要在用户的浏览器中打开网站,令牌就一直有效就足够了。为此,可能有一个更简单的解决方案-使用iframe定期重新登录用户:facebook从cookie php自动重新登录
为我工作...