任何人都可以解释 OAuth 吗?

Posted

技术标签:

【中文标题】任何人都可以解释 OAuth 吗?【英文标题】:Can anybody explain OAuth? 【发布时间】:2011-03-31 16:26:01 【问题描述】:

我在 http://oauth.net/ 上读过一些关于它的内容,显然这是“一种发布和与受保护数据交互的简单方法”。

我认为这正是我需要提供一种通过 REST Web 服务从 android/iphone 应用程序访问数据的安全方式,但我无法弄清楚它到底是什么。

那么,简而言之,它到底做了什么,有没有(真正)简单的例子我可以遵循,最好是用 C# 实现一些可以从智能手机应用程序访问的东西?

【问题讨论】:

它类似于 OpenID,但不同。这篇文章解释得很好:softwareas.com/… 如果调用 OAuth “简单”,他们应该尝试 HTTP 基本身份验证。 【参考方案1】:

来自 Craig Stuntz 提供的链接:

Open ID 让您可以一次登录多个站点。每次您需要登录 Zooomr(使用 Open ID 的站点)时,您将被重定向到您登录的 Open ID 站点,然后返回 Zooomr。 OAuth 允许您授权一个网站(消费者)从另一个网站(提供商)访问您的数据。例如,您想授权打印提供商(称为 Moo)从照片存储库中获取您的照片(称为 Flickr)。 Moo 会将您重定向到 Flickr,它会询问您,例如,“Moo 想要下载您的 Flickr 照片。很酷吗?”,然后回到 Moo 打印你的照片。

DotNetOpenAuth 是一个很好的用于 Open ID 和 OAuth 的 C# 库。

【讨论】:

【参考方案2】:

OAuth 是应用程序保留登录数据而无需存储真实数据的另一种方式。

当您登录某个页面时,您通常拥有用户名和个人密码,或任何其他类型的登录凭据。现在,如果您希望应用程序能够通过该登录进行操作,则需要向该应用程序提供您的原始登录数据。这意味着您在应用程序中输入了您的用户名和密码。到目前为止还不错,但问题是,如果您想通过该应用程序保持登录状态,它需要存储您的凭据。但是为了能够将正确的登录数据发送到实际页面,它需要以原始形式存储这些数据(只需进行一些加密或其他操作)。因此,如果有人知道数据是如何存储在应用程序中的,他们就可以提取您的原始登录凭据。

这是一个安全问题,这正是 OAuth 的用武之地。使用 OAuth,每个应用程序都由消费者密钥和消费者秘密标识。两者都是客户端独有的,通常没有用户会看到这些(尤其是秘密)。现在,当您想要允许您的应用程序访问该页面时,您可以启动 OAuth 授权过程。您只需登录该页面并明确允许该特殊应用程序(由消费者密钥标识)具有访问权限。如果您这样做,应用程序将收到另一个密钥对,即访问令牌和访问密钥。该密钥对仅适用于您的帐户,并且仅在由确切的应用程序使用时才有效(由消费者密钥识别,并由消费者秘密保护为原始应用程序)。现在,应用程序需要存储的只是访问密钥对(连同已经存储的消费者密钥对),它可以访问页面而无需看到您的原始登录数据。

这样,没有人能够获得您的实际登录详细信息,并且没有其他人(或没有其他应用程序)能够使用生成的访问凭据来访问该页面。如果您不希望应用程序仍然具有访问权限,您可以轻松撤销访问密钥对,使应用程序无法再使用它。

所以 OAuth 只是保护您真实登录数据的一种方式。除此之外,它不会增加任何其他级别的安全性或其他东西,它只是为了保护您的数据。

【讨论】:

这是对 OAuth 的精彩解释。我为像我这样的傻瓜找到的另一个很好的解释是blog.varonis.com/introduction-to-oauth

以上是关于任何人都可以解释 OAuth 吗?的主要内容,如果未能解决你的问题,请参考以下文章

任何人都可以解释python中的lambda函数吗? [复制]

从互联网获取表格数据时,任何人都可以用 UItableview 来解释 MVC 吗?

任何人都可以解释switch,while和continue的交互吗?

任何人都可以向我解释CMVideoFormatDescriptionGetCleanAperture()吗?

任何人都可以用几个术语解释 DYNAMIC_CLASSes 吗?

C# 新手,任何人都可以向我解释枚举和设置变量的工作原理吗? [关闭]