【发布时间】:2013-10-30 07:55:07
【问题描述】:
我是一名自学成才的后端工程师,所以我会边学习边学习所有这些东西。很长一段时间以来,我一直在为我的用户使用基本身份验证。只要您拥有正确的用户名和密码,就可以访问所有 Tastypie API 资源。
许多开发人员建议不要使用这种方法,因为每个请求都包含用户名和密码。任何具有适当技能的人都可以监听我的 iOS 应用程序和我的 Django 服务器之间的连接并获取他们的密码。
我不想让我的用户凭据面临风险,因此我想实施一种更安全的身份验证方式。我一直在做大量的阅读,并遇到了具有完整令牌方法的 OAuth 2.0。将用户名和密码发送到服务器的唯一时间是它们请求访问令牌时。
在给出访问令牌后(每个用户都将拥有一个唯一的访问令牌),该令牌用于进行身份验证,而不是用户名和密码。
这样,任何收听的人都只会看到令牌。如果令牌暴露,我可以轻松移除旧令牌并为用户生成新令牌。
除此之外,我想让它只有来自我的 iOS 应用程序的请求才能访问美味的资源。(我正在考虑为我的应用程序生成一个应用程序密钥,如果第三方服务想要使用该服务,我也会授予他们唯一的密钥)
如何在我的 Django 设置中实现这一点?我可以使用 OAuth2.0 来做到这一点吗?如果我实现了这个设置,我怎样才能让攻击者无法获取应用程序令牌?
【问题讨论】:
-
我不确定 Django 方面的情况,但我使用了 GTMOAuth2,它使用 Google Auth for iOS 应用程序,也许您可以将其作为一个很好的第 3 方身份验证方法来检查。链接是groups.google.com/forum/#!forum/gtm-oauth2
-
使攻击者无法获取您的应用程序令牌的唯一真正方法是完全避免生成它们。您的软件堆栈中的任何一点都可能存在漏洞,哎呀——您的所有令牌都已被盗用。关键是您使用身份验证方法保护的数据是否值得尝试破解它。如果它是一个简单的网站,那为什么不继续使用
Basic Auth。但如果你真的很喜欢OAuth2,here 是一个简单的方法。 -
@kroolik 我明白你在说什么,但这种方法有一点问题。当然,它可能是一个不关心的简单网站。但!任何使用 WireShark 之类的东西的人都可以嗅探应用程序和服务器之间发送的数据包。大多数用户的所有在线帐户都使用相同的密码。这就是为什么使用 Basic Auth 无法做到公正的原因。
-
@RiegieGodwin,如果有人在使用 WireShark,那么他们可以嗅探您的应用程序 ID、秘密或访问令牌。如果您担心窃听,请尝试使用 SSL。
-
@kroolik 真是个好建议,我要试试 SSL 方法,看起来更有希望
标签: ios django authentication oauth tastypie