django-allauth 中多个设备的访问令牌授权

Posted

技术标签:

【中文标题】django-allauth 中多个设备的访问令牌授权【英文标题】:Access token authorization for multiple devices in django-allauth 【发布时间】:2015-02-23 01:37:18 【问题描述】:

我将django-allauth 和django-rest-auth 用于ios 移动应用后端。我是 Django Rest Framework 的新手,尤其是提到的那些。这些非常适合基于访问令牌的授权。如您所知,用户成功登录后何时会收到访问令牌,而注销时访问令牌会被删除。但是,如果有多个设备,我假设用户将从所有设备中注销。有没有办法为每个设备创建访问令牌并使用这些访问令牌进行授权?

【问题讨论】:

【参考方案1】:

当您处理自己的 API、客户端和第三方 API 之间的身份验证时,您绝不希望将第三方应用程序的令牌暴露给您的客户端。我为python-social-auth 提供了covered this in the past on Stack Overflow,我建议您也查看django-allauth

您说过您正在使用django-rest-auth,它为每个用户维护一个在多个客户端之间共享的令牌。这与 Django REST Framework 提供的TokenAuthentication 非常相似,并且具有许多相同的缺点。由于所有客户端都为用户共享相同的身份验证令牌,因此如果出于任何原因必须撤销令牌,所有客户端都会受到影响。更糟糕的是,django-rest-auth 允许用户明确地“退出”,这会立即撤销所有人的令牌。如果只有一两个客户端会使用您的 API,这很有效,并且他们可以处理神秘消失的令牌,但 它不适用于任何更大的情况。它也不支持用户使用多个令牌,这正是您要寻找的。​​p>

我通常建议 API 使用基于令牌的身份验证,如 OAuth,而 django-oauth-toolkit 往往是 Django REST 框架的推荐方式。这将允许您从本质上代理第三方和您的客户之间的请求,同时为客户保留唯一的用户令牌。由于令牌对客户端是唯一的,因此您无需担心令牌被撤销或过期会影响另一个客户端,因为令牌将彼此独立。

许多“大牌”都使用 OAuth,例如 Stack Exchange、Google 和 Facebook。虽然它不直接支持“注销”的概念,但通常建议您为应用程序的用户创建自己的页面以撤销应用程序的令牌,这样他们就可以控制谁可以和不能访问 API代表他们。

【讨论】:

嗨,凯文,感谢您的回答。但是这种方法如何帮助解决多设备问题呢? 我研究过 django-oauth-toolkit,但这并不是我真正需要的。我不打算处理客户端应用程序,我的后端仅用于本机 iOS 应用程序。我有与这里描述的相同的问题TokenAuthentication -- Why can there be only one token per user?

以上是关于django-allauth 中多个设备的访问令牌授权的主要内容,如果未能解决你的问题,请参考以下文章

使用 react-google-login 和 django-allauth 刷新令牌

如何获取设备访问令牌并执行多个 HTTP POST 请求

django-allauth:将多个社交帐户链接到单个用户

django-allauth添加github账号访问入口

如何使用 django-allauth 访问用户名和配置文件

如何使用 django-allauth 访问用户名和配置文件