有人能解释一下OAuth吗?

14

我在http://oauth.net/上大致了解了一下,它显然是“发布和与受保护数据交互的简单方法”。

我认为这正是我需要提供安全访问来自Android/iPhone应用程序的数据的REST Web服务,但我无法确定它到底是什么。

简单地说,它究竟是做什么的?有没有非常简单的实例可以跟随,最好是使用C#实现的,并且可以从智能手机应用程序访问?


1
这就像OpenID,但又不同。这篇文章解释得很好:http://softwareas.com/oauth-openid-youre-barking-up-the-wrong-tree-if-you-think-theyre-the-same-thing - Craig Stuntz
如果将OAuth称为“简单”,那么他们应该尝试使用HTTP基本身份验证。 - user142019
2个回答

13

从 Craig Stuntz 提供的链接中可以了解到:

Open ID 可以让您在多个网站上使用一个登录。每次您需要登录使用 Open ID 的 Zooomr 网站时,您将被重定向到您的 Open ID 站点进行登录,然后返回到 Zooomr。 OAuth 可以让您授权一个网站(即“消费者”)从另一个网站(即“提供者”)访问您的数据。例如,您想授权一个打印服务提供商(称为 Moo)从一个照片库(称为 Flickr)获取您的照片。Moo 将重定向您到 Flickr,询问您是否同意“Moo 想要下载您的 Flickr 照片。可以吗?”,然后返回到 Moo 打印您的照片。

DotNetOpenAuth 是一款优秀的 C# 库,可用于实现 Open ID 和 OAuth。


13

OAuth是一种替代方式,使应用程序能够保留登录数据而无需存储真实数据。

通常情况下,当您登录某个页面时,会使用用户名和密码或其他登录凭据。现在,如果您想让一个应用程序通过该登录进行操作,就需要向该应用程序提供原始登录数据,这意味着您将用户名和密码都输入到该应用程序中。这并不算坏事,但问题在于,如果您希望通过该应用程序保持登录状态,它需要存储您的凭据。为了使其能够将正确的登录数据发送到实际页面,它需要以原始形式存储这些数据(只是加了一些加密之类的东西)。因此,如果有人知道应用程序中数据的存储方式,他们就可以提取您的原始登录凭据。

这是一个安全问题,OAuth正好解决了这个问题。OAuth使用消费者密钥和消费者密钥的方式来识别每个应用程序。这两个键都是客户端唯一的,通常用户永远不会看到它们(尤其是不会看到秘密)。现在,当您想要允许您的应用程序访问该页面时,您启动OAuth授权过程。您只需要登录该页面,并明确允许那个特殊的应用程序(由消费者密钥标识)访问。如果您这样做,该应用程序将接收到另一对键,即访问令牌和访问密钥。该键对仅适用于您的帐户,并且仅在精确的应用程序使用时(由消费者密钥标识,并通过消费者密钥保护为原始应用程序)才有效。现在,该应用程序只需要存储那个访问密钥对(连同已存储的消费者密钥对),就可以访问页面,而无需查看您的原始登录数据。

这样,没有人能够获取您的实际登录详细信息,并且没有其他人(或其他应用程序)能够使用生成的访问凭据访问该页面。如果您不想让应用程序继续访问,您可以轻松地撤销访问密钥对,以便应用程序不能再使用它。

因此,OAuth只是一种保护您真实登录数据的方式。除此之外,它并没有增加任何其他安全级别或类似的内容,它只是为了保护您的数据。


这是OAuth的精彩解释。我发现另一个适合像我这样的新手的好解释在https://blog.varonis.com/introduction-to-oauth/上。 - snark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接