Instagram 访问令牌过期

Posted

技术标签:

【中文标题】Instagram 访问令牌过期【英文标题】:Instagram access token expire 【发布时间】:2014-03-31 03:26:25 【问题描述】:

我有一个应用程序,可以从我的 Instagram 帐户中提取数据。 我授权了这个应用程序一次,并获得了访问令牌。但我很担心, 如果这个令牌过期了怎么办?我是否应该每次都授权该应用程序 令牌过期了? 我可以从身份验证码接收另一个访问令牌吗? 如果不是,我该怎么做才能让我的应用程序始终从帐户中提取数据 没有我的参与? 谢谢。

【问题讨论】:

如果您更改用于授权应用程序的 Instagram 帐户的密码,可能会发生这种情况; 根据updated IG docs,身份验证令牌可以并且将在任意时间过期(我目前开始看到这种行为,这是相当灾难性的)。没有刷新令牌,也无法更新过期令牌;您必须通过用户 oauth 流程才能获得新令牌。 【参考方案1】:

但我很担心,如果这个令牌过期了怎么办?

AFAIK,Instagram 访问令牌目前不会过期。

注意: From Instagram documents.

请注意,我们不包括到期时间。我们的 access_tokens 没有明确的过期时间,尽管您的应用程序应该处理用户撤销访问权限或我们在一段时间后过期令牌的情况。在这种情况下,您的响应元数据将包含“error_type=OAuthAccessTokenError”。换句话说:不要假设您的 access_token 永远有效。

是否应该在每次令牌过期时授权应用程序?

目前,您不需要这样做,因为令牌不会过期。当令牌将来到期时,将向您发送相应的警告或错误代码和消息,您需要处理。

我该怎么做才能让我的应用始终从帐户中提取数据而无需 我的参与?

您可以尝试以下操作:

    使用 sharedpreference 存储访问令牌。

    第一次尝试获取需要 accesstoken 的数据时(已验证的请求),首先检查 sharedpreference 是否存储了 accesstoken。 如果是,那么您不需要登录,只需使用该访问令牌。如果您没有优先访问令牌,请使用 instagram 凭据登录,获取访问令牌,然后以共享偏好共享它,并将其用于后续请求。

    您可以提供 instagram 注销选项,您只需从 sharedprefernce 中清除 accesstoken。

希望对你有帮助。

【讨论】:

如何检查访问令牌是否过期? @RoiMulia 我建议尝试对/users/self 进行API 调用,然后检查oAuthAccessTokenError 现在随着 instagram 最近的变化,访问 token 确实过期了 @Ankit 是个人经验还是你在文档中看到的。我的令牌也过期了。你能确认一下吗? 文档 - instagram.com/developer/authentication 访问可能随时过期。【参考方案2】:

更新 - 这不再像 cmets 中提到的那样起作用


虽然没有很好的记录,值得指出的是,检索帖子的提要不需要 accessToken。

https://api.instagram.com/v1/users/user-id/media/recent/?access_token=ACCESS-TOKEN

也可以只传递你的client_id来调用

https://api.instagram.com/v1/users/user-id/media/recent/?client_id=CLIENT_ID

这在他们的文档中并没有明确说明。

https://instagram.com/developer/endpoints/users/

【讨论】:

它实际上记录在这里。很顶。 instagram.com/developer/endpoints 我错过了,如果直接查看特定的端点文档,即instagram.com/developer/endpoints/media,很容易错过 我同意在没有访问令牌的情况下可以访问某些端点还不够清楚。 这已随着 Instagram 的新 API 政策 (17/11/2015) 而改变。如果您的应用在 2011 年 17 月之前注册,您仍然可以使用 client_id 访问 API,但它将在 2016 年 6 月停止工作。 是的。一周前停止工作,给我们很多人带来了很多痛苦。【参考方案3】:

Instagram 访问令牌会在任意时间过期。 根据我的经验,在过去 7 个月中两次。

在没有我参与的情况下,我没有找到任何方法来重新生成令牌,恕我直言,唯一有效的解决方案是避免使用官方 API 并使用类似的东西: https://***.com/a/33783840/

【讨论】:

【参考方案4】:

在过去的 3 周中,我多次创建了新令牌,并且它在 2 天后过期,但我也注意到一些在 3 年前创建的令牌没有过期。此外,Instagram 文档称该令牌可能会在不久的将来随时过期。

此时有一个技巧可以显示用户的最后一篇文章,只需在 URL 后面加上 `/?__a=1'' 在用户名之后,例如

https://www.instagram.com/vaseem.ishak/?__a=1

您将获得带有图像文本的用户最后一篇帖子,没有像 etc 这样的评论。只需挖掘返回的 JSON 代码

【讨论】:

以上是关于Instagram 访问令牌过期的主要内容,如果未能解决你的问题,请参考以下文章

Instagram 图形 API 访问令牌

现在有没有办法在不使用访问令牌的情况下获取 instagram 提要(06/2016)?

通过 Instagram API 访问公共 Instagram 内容而不使 accesstoken 过期

Angular:Instagram 授权 - 访问令牌

Instagram 订阅 API 请求访问令牌

无需登录即可获取 Instagram 访问令牌