首页 > 解决方案 > Twitter / Tweepy OAuth - 如何保存 oauth_token 以在 REST API 设置中的回调中验证它

问题描述

我正在编写一个带有 REST API 设置的简单 Twitter 身份验证流程。客户端只是普通的 javascript/Vue 代码——没有服务器端渲染。这使用了一个使用 Django Rest Framework 构建的后端 REST API,使用 tweepy 库来包装 Twitter API。

我通过以下步骤进行身份验证:

  1. 用户单击“登录 twitter”按钮,这会触发对我的后端 API /get-url/ 的调用
  2. API 调用 Twitter 的 get_authorization_url(使用我的 Twitter 应用程序凭据),获取令牌,并将此重定向 URL 返回给客户端
  3. 客户端将用户重定向到 Twitter URL 以完成身份验证
  4. 在回调时,客户端将所有参数传递给后端 API 端点
  5. API获取token和secret;使用用户身份验证创建一个 tweepy API;并调用 verify_credentials
  6. 如果一切正常,我们在与 Twitter 用户绑定的 Django 数据库中创建一个用户帐户,存储他们的令牌和秘密;使用 JWT 登录用户;并使用令牌返回 200 成功。
  7. 前端处理 JWT 令牌刷新等;但否则将其用于 API 其余部分的身份验证。

但是,有一点我很难过:Twitter 文档建议在我的第 2 步中,我应该保存 request_token,以便在第 5 步中,我可以检查它是否与从 Twitter API 返回的内容相匹配(https:/ /developer.twitter.com/en/docs/authentication/guides/log-in-with-twitter )。

tweepy 文档示例(http://docs.tweepy.org/en/latest/auth_tutorial.html)建议将其存储在会话中,然后在回调时检查它们并从会话中删除。

但是,这在像我这样的 REST API 设置中没有意义(至少对我而言)。我不知道如何将它临时存储在服务器上,以便在回调时我可以检查它的值 - 在重定向之前,我对用户“绑定”这个令牌一无所知,没有用户记录可以存储在数据库。

我能想到的就是让(2)上的API将它返回给客户端;然后可以在重定向之前将其存储在cookie中;然后在回调时,将其传递回服务器......但这似乎非常复杂,并且我认为以纯文本方式完成所有操作会使执行此额外检查的价值无效。

希望我在这里遗漏了一些明显的东西。

标签: pythondjangotwitterdjango-rest-frameworktweepy

解决方案


您是否尝试过使用python-social-auth库?

from_the_docs:推特在受支持的身份验证后端中。


推荐阅读