在 Django Rest Framework + Django Social Auth 中连接 Facebook

Posted

技术标签:

【中文标题】在 Django Rest Framework + Django Social Auth 中连接 Facebook【英文标题】:Connect with Facebook in Django Rest Framework + Django Social Auth 【发布时间】:2014-05-13 19:27:19 【问题描述】:

我正在使用Django Social Auth 连接 Facebook 问题,它运行良好。我使用Django Rest Framework 为我的 Django 应用程序开发了一个 API。但是我对将 Django Social Auth 与 ios 设备的 Django Rest Framework 一起使用感到困惑。

我搜索过1、2、3 和4,但它们通常使用 Angular.js。我不熟悉iOS开发。

facebook connect with spa 和移动设备有什么不同? * 我如何将这些软件包一起使用? 我可以从 django-social-auth 迁移到 python-social-auth 吗?

【问题讨论】:

This 是使用 python-social-auth 在 API 上实现身份验证时的常见模式。 django-social-auth 可以实现类似的方法。 oauth2 token authentication using django-oauth-toolkit and python-social-auth的可能重复 【参考方案1】:

建议您让python-social-auth 为您处理 Facebook 登录,而是使用另一个用于 Django REST Framework 的 OAuth 插件来向 Django 进行身份验证。这还具有通过标准 Django 身份验证系统支持非 Facebook 登录的额外好处。

我对将 Django Social Auth 与 Django Rest Framework 一起用于 ios 设备感​​到困惑。

我最近answered a similar question 谈到了使用python-social-auth 和 Django REST 框架实现身份验证。它包括在使用第三方实施身份验证时需要阅读的一些要点,以及关于如何不应将第三方 OAuth 令牌传递回客户端的一些重要说明。

如何将这些包一起使用?

虽然该答案特别提到使用 OAuth 作为 python-social-auth 背后的 API 的身份验证方法,但您可以使用内部使用 Django 身份验证系统的其他身份验证方法,例如 TokenAuthentication。在任何情况下,您最终都将使用您的后端 API 在您的前端应用程序和您的第三方身份验证提供商之间代理身份验证。

facebook connect with spa 和移动设备有什么不同?

Facebook 提供与某些移动操作系统的直接集成,最著名的是 iOS 和 android。这会绕过您的 API 进行身份验证,并直接使用 Facebook 对您的移动应用程序进行身份验证。理想情况下,它将验证您的后端 API 而不是移动应用程序。如果您手动将访问令牌传递回您的 API,这仍然是可能的,本质上与 python-social-auth 做的事情相同,但 可能有风险并且可能不值得额外的努力。

Facebook Connect(现在称为 Facebook 登录)的工作方式与 Facebook 集成在移动设备上的工作方式类似。可能对您有利的一个区别是,从单页应用程序的 Facebook 登录转移到基于 OAuth 的身份验证模式非常容易。这在 Facebook 开发人员文档中记录为 "Manually Building a Login Flow",并且与支持基于 OAuth 的登录的库兼容,例如 python-social-auth

我可以从 django-social-auth 迁移到 python-social-auth 吗?

这应该不再是问题了,因为python-social-auth 已经有效地取代了django-social-auth

【讨论】:

【参考方案2】:

您现在可以使用此库 https://github.com/PhilipGarnero/django-rest-framework-social-oauth2 使用来自任何 python-social-auth 后端(Facebook、Google、Github 等)的不记名令牌/第三方访问令牌对您的 django-rest-framework 进行身份验证

该模块为 django-rest-framework 提供了 python-social-auth 和 oauth2 支持。因此,这可以为您节省大量时间来设置让您的 DRF 获得社交授权并确保 OAuth2 安全所需的内容。

【讨论】:

Django-rest-framework-social-oauth2 与 DRF 推荐的 Django OAuth Toolkit 相比如何? django-rest-framework.org/api-guide/authentication/…【参考方案3】:

我认为您可以使用django rest framework、django-rest-auth 和allauth 实现这一目标。 这三个配合得很好。

django rest framework 你已经很熟悉了。 allauth 负责社会认证。 django-rest-auth 负责创建用于社交身份验证的 RESTful api,即 django-rest-framework 和 allauth 之间的连接。

【讨论】:

所有可用的解决方案都没有适当的文档。例如 django all oauth, django-restauth 同意@XciA,专门针对 django-rest-auth 的文档非常少,很难理解如何进行社交验证。

以上是关于在 Django Rest Framework + Django Social Auth 中连接 Facebook的主要内容,如果未能解决你的问题,请参考以下文章

在 django-rest-framework 中插入 django-allauth 作为端点

django使用rest_framework

Django rest framework 身份和权限验证

Django Rest Framework

Python前后端分离开发Vue+Django REST framework实战_Django REST framework框架

Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers