什么时候在Django中使用OAuth?它在Django登录框架中的确切作用是什么



我正在努力确保我正确理解它:

OAuth是唯一的第三方认证者的桥梁吗?这些认证者像Facebook、谷歌这样常见?使用它可以以安全的方式改善用户体验,但不会为Django登录框架添加额外的安全层?或者只有授权代码授予类型是这样的?我可以这样拿吗?

什么是OAuth

根据RFC 6749:

OAuth 2.0授权框架支持第三方应用程序以获得对HTTP服务的有限访问权限,在通过协调审批交互来代表资源所有者在资源所有者和HTTP服务之间,或者通过允许第三方应用程序以自己的名义获得访问权限。

本质上,它是一种授权协议,用于在多个应用程序之间共享权限。

如果您决定实现OAuth,那么您的应用程序将允许其他服务以编程方式查看用户的数据,并在需要时代表用户采取行动。

每当应用程序需要访问您使用的另一个服务时,它可能会使用OAuth来执行这些操作。(例如,当游戏过去要求我们允许代表我们在Facebook上发帖时。(

OAuth不是什么

看到你的问题,我觉得对OAuth有误解。

OAuth不是第三方身份验证方法的桥接器。如果您正在寻找这种类型的身份验证机制,您应该了解单点登录(SSO(。对于Django,您可以使用Django-simple-so。

它能增强安全性吗

根据使用情况,是的,它可以增强安全性如果您的应用程序需要与其他服务交换信息,最好限制这些第三方服务在应用程序中的功能、功能和时间。

例如,假设您的用户需要允许另一个应用程序从您的应用程序收集信息:

  • 如果您使用老式的电子邮件和密码组合方法,这些凭据将在第三方服务发生数据泄露的情况下暴露
  • 另一方面,使用OAuth要安全得多,因为存储在服务器中的凭据将不包含用户的密码,并且具有非常特定的角色,而且很容易被吊销

如果你有一个Django应用程序,我想说你不必实现OAuth——你应该可以使用Django提供的任何登录功能。

OAuth通常用于不同服务之间的通信。这些服务不一定是第三方服务,它们可以属于同一方。例如,当您有一个单页应用程序或移动应用程序想要调用后端API来获取一些数据时。然后最好使用OAuth,因为它是一种标准,可以帮助您以安全的方式实现授权。

当你想到";使用Google/Facebook登录";,您真正想要的是SSO解决方案(Single Sign-On(。该解决方案通常使用OpenIDConnect(OIDC(来实现,这是一个建立在OAuth之上的协议。不过,你可以只使用OIDC让用户登录谷歌,获得ID令牌,然后根据谷歌的ID令牌向你的Django应用程序验证用户。您不需要OAuth(从某种意义上说,您不需要从谷歌获得访问令牌,不需要自己的授权服务器,并且可以依赖基于cookie的会话(。

最新更新