我正在使用django-allauth和django-rest-auth用于iOS移动应用后端。我是Django Rest Framework的新手,特别是提到的那些。这些非常适合基于访问令牌的授权。如您所知,登录成功后用户会收到访问令牌,并在注销时删除访问令牌。但是,在多个设备的情况下,我假设用户将从所有设备注销。有没有办法为每个设备创建访问令牌并使用这些访问令牌进行授权?
答案 0 :(得分:2)
当您处理自己的API,客户端和第三方API之间的身份验证时,您永远不希望将第三方应用程序的令牌公开给您的客户端。我python-social-auth
代表django-allauth
,我建议django-rest-auth
同时。
您说您正在使用TokenAuthentication
,它为每个用户维护一个在多个客户端共享的令牌。这与Django REST Framework提供的django-rest-auth
非常相似,并且它带有许多相同的缺点。由于所有客户端共享用户的相同身份验证令牌,因此如果必须因任何原因撤消令牌,则所有客户端都将受到影响。更糟糕的是,django-oauth-toolkit
允许用户明确地"退出",立即撤销每个人的令牌。如果只有一个或两个客户端将使用您的API,并且它们可以处理神秘消失的令牌,则效果很好,但对于任何更大的都不适用。它也不支持用户的多个令牌,这正是您所寻找的。 p>
我通常建议API 使用基于令牌的身份验证,例如OAuth ,而{{1}}往往是Django REST Framework推荐的API。这将允许您在第三方和客户端之间实质上代理请求,同时为客户端的用户保留令牌。由于令牌对于客户端是唯一的,因此您不需要担心令牌被撤销或因一个客户影响另一个客户而过期,因为令牌将彼此独立。
许多"大牌"使用了OAuth。在那里,例如covered this in the past on Stack Overflow,Stack Exchange和Google。虽然它不直接支持"退出"的概念,但通常建议您为应用程序的用户创建自己的页面以撤销应用程序的令牌,这样他们就可以控制谁可以和可以&# 39;代表他们访问API。