改编自 Eran Hammer-Lahav 于 2007 年 9 月 5 日发布的 解释 OAuth
OAuth 于 2006 年 11 月左右开始,当时 Blaine Cook 正在研究 Twitter OpenID 实施。他联系了 Chris Messina,希望能找一种方法将 OpenID 与 Twitter API 结合起来以委托身份验证。他们在 CitizenSpace OpenID 会议上与 David Recordon、Larry Halff 和其他人会面,讨论现有的解决方案。Larry 正在研究为 Ma.gnolia Dashboard Widgets 集成 OpenID。在审查了现有的 OpenID 功能以及其他行业实践后,他们得出结论:没有用于 API 访问委托的开放标准。几个月中,他们进行了线上和线下的持续讨论。
2007 年 4 月,创建了一个 Google 群组,其中有一小群实施人员负责为开放协议编写提案。事实证明,此问题并非 OpenID 独有,当 Google 的 DeWitt Clinton 了解到该项目时,他表示有兴趣支持该努力,即使只是作为利益相关者。2007 年 7 月,该团队起草了初步规范,并将该小组向任何有兴趣做出贡献的人开放。2007 年 10 月 3 日,发布了 OAuth Core 1.0 最终草案。
当今许多豪华汽车都配有代客泊车钥匙。这是一种特殊的钥匙,可以交给停车场服务员,与你的普通钥匙不同,它不允许汽车行驶超过一两英里。一些代客泊车钥匙无法打开汽车后备厢,而另一些代客泊车钥匙会阻止访问你车载手机通讯录。无论代客泊车钥匙施加哪些限制,这个想法都非常巧妙。你可以使用特殊钥匙授予他人有限访问你汽车的权限,同时使用你的普通钥匙解锁所有内容。
每天都有提供新网站推出,这些网站提供可将其他网站的功能整合在一起的服务。例如用于打印在线照片的照相冲印服务,用于利用你的地址簿寻找朋友的社交网络以及用于构建流行网站的桌面应用版本的 API。这些都是很棒的服务 – 一些实现不太好的部分在于它们要求你提供其他网站的用户名和密码。当同意共享你的秘密凭据时,你不仅让其他人知道你的密码(是的,就是你用来进行网上银行的密码),还授予他们充分访问权限以按照自己的意愿行事。他们可以做任何他们想做的事情 – 甚至可以更改你的密码并锁定你。
这是 OAuth 解决的问题。它使你(用户)能够将一个网站(称为服务提供商)上的私人资源访问权授予另一个网站(称为消费者,不要与你(用户)混淆)。而 OpenID 完全是关于使用一个标识登录多个网站的,OAuth 则是关于在完全不共享你的标识(或其秘密部分)的情况下授予对你的东西的访问权的。
OAuth 不是 OpenID 扩展,并且在规范级别上,只与 OpenID 共享很少的事情 – 一些共同作者以及两者在身份验证和访问控制领域都是开放规范的事实。“为什么 OAuth 不是 OpenID 扩展?”可能是该组中经常被问及的问题。答案很简单,OAuth 尝试为开发者提供一种标准方法,使他们能够通过 API 提供他们的服务,而无需强制其用户公开他们的密码(及其他凭据)。如果 OAuth 依赖于 OpenID,则只有 OpenID 服务才能使用它,虽然 OpenID 很棒,但有很多应用程序不适合它或不希望使用它。但这并不意味着你不能同时使用这两个应用程序。OAuth 专门用于让用户授予访问权限,而 OpenID 专门用于确保用户确实是他们自称的人。它们应该协同配合得非常好。
每个人。如果你是一名网络开发者 – 我们希望是你。
不是。OAuth 是许多已建立的行业协议的标准化和综合智慧。它类似于当前正在使用的其他协议(Google AuthSub、AOL OpenAuth、Yahoo BBAuth、Upcoming API、Flickr API、Amazon Web Services API 等等)。每个协议都提供一种专有方法,用于为访问令牌或票证交换用户凭据。OAuth 通过仔细研究每一种这些协议并提取最佳实践和共性来创建,这将允许实施新的实现以及现有服务顺利过渡以支持 OAuth。
OAuth比部分其他协议和服务更为先进的一个方面是它可直接处理非网站服务。OAuth已内置对桌面应用、移动设备、机顶盒和当然网站的支持。现今很多协议使用硬编码到您的软件中的共享密钥来进行通信,而当尝试访问您的私有数据的服务是开源时,此类密钥会出现问题。