锻造坊 - OpenID

作者:Reuven M. Lerner

感谢火狐浏览器。是的,它是一个很棒的浏览器。是的,它有各种各样的优秀插件,让我可以做任何事情,从调试我的 Web 应用程序到查看天气预报。而且,它可以在多个平台上工作,这使得它更加出色。

但是,随着基于 Web 的应用程序越来越成为我生活中不可或缺的一部分,我已经越来越依赖火狐浏览器记住我的密码的能力。这可能很傻,甚至有点可悲,但我不可能记住这些年来我创建的所有不同的密码。对于那些我偶尔更改密码的网站来说尤其如此,要么是因为我当前的密码过期了,要么是因为我决定更改它。

这也意味着,当我使用不同的浏览器,甚至是不同的计算机时,我常常完全不知所措。当然,我记得我的一些密码,但是没有简单的方法让我跟踪所有密码,除非把它们写在某个地方。所以,我做了数字化的等价物——把它们存储在我的浏览器中——并确保我随身携带我的笔记本电脑。

当然,管理多个密码并不是什么新鲜事。甚至在 Web 应用程序兴起之前,人们就已经登录到不同的计算机、网络、电子邮件帐户、数据库系统等等。许多公司通过“单点登录”赚了不少钱,他们提供的后端解决方案允许人们登录到一台计算机,从而访问许多不同的计算机。

但是,尽管问题可能不是新的,但其规模是前所未有的。我们不再担心数百或数千人跟踪十几个密码,并获得 IT 支持部门的帮助。相反,我们现在必须担心数百万人,他们每个人都有几十个密码,并且几乎没有任何技术支持。

此外,每个网站都有其自身的特定需求,更不用说其独特的用户界面了。更糟糕的是,世界与公司截然不同;你不能从上面强加一个标准的解决方案。相反,必须有一种方法将竞争引入到等式中,以便个人可以选择自己的单点登录提供商。

多年来,许多公司试图进入互联网应用程序领域。也许最著名(或臭名昭著)的是微软的 .NET Passport(现在称为 Windows Live ID),它在盛大的宣传下推出——并迅速引起了对隐私问题的强烈负面关注。即使微软的产品在技术上非常出色(我没有足够的知识来判断),人们也不想被告知他们必须将私人和敏感数据委托给谁。

OpenID 是解决这个问题的一个越来越流行的方案。OpenID 不一定是一项新技术;它以某种形式存在已经好几年了。然而,它正在迅速兴起——如此之快,以至于在我 2008 年 2 月写下这些话之前,我们看到微软、谷歌、IBM、VeriSign 和雅虎都拥抱了 OpenID。

现在,的确,支持 OpenID 的网站数量目前还很少——在撰写本文时大约有 8,000 个。然而,这个数字正在迅速增长,我预计随着上述互联网巨头开始参与进来,这个速度将会加快。

如果你的规模比谷歌或微软小呢?OpenID 值得添加到你的网站吗?它相对容易吗?我很高兴地说,这两个问题的答案都是肯定的。

本月,我将讨论 OpenID 的用户端——如何注册 OpenID 以及如何管理它。我还将解释 OpenID 规范如何考虑到你最终可能需要更换提供商的事实。

OpenID 的基础知识

术语 OpenID 既指个人的唯一标识符,也指描述围绕该标识符的所有技术的标准。要创建 OpenID,你必须向 OpenID 提供商注册。一旦你注册了你的 OpenID,就是提供商为你使用的每个启用 OpenID 的应用程序进行身份验证。换句话说,OpenID 提供商负责检查你的身份,这通常意味着确认你输入的用户名字和密码是可以接受的。

因此,使用 OpenID 登录网站意味着发生以下情况

  • 你告诉 Web 应用程序你想使用 OpenID 协议登录。

  • 你将你的 OpenID(稍后会详细介绍)输入到应用程序的登录屏幕中。

  • 应用程序将你发送到你的 OpenID 提供商的登录屏幕。

  • 如果提供商接受你的凭据(通常是你的用户名和密码),它会要求你确认你的身份可以导出到 Web 应用程序,以及是否可以在将来也这样做。显然,如果你表示你愿意在将来与此 Web 应用程序共享你的身份,你将在将来跳过此步骤。

  • 一旦允许将你的身份导出到 Web 应用程序,你将被返回到你想使用的原始应用程序,登录并准备使用它。

请注意,OpenID 和“标准”登录系统之间存在一些重要的区别。首先,用户针对与他们尝试使用的站点不同的站点进行身份验证。这类似于通过 Google Checkout 或 PayPal 进行购买,这两者都要求用户在他们自己的网站上,而不是在线商店所属的网站上验证自己的身份并授权购买金额。

一些 OpenID 的批评者说,用户可能会对从一个站点切换到另一个站点感到惊讶或困惑,但我认为 Google Checkout 和 PayPal 已经证明,相当多的人不会因为来回切换而感到反感。此外,我读到 Firefox 3 将包含一些集成的 OpenID 支持,这可能会消除一些切换站点的需要——或者至少使其看起来更集成。然而,我已经使用了 Firefox 3 的 beta 版本几个月了,但还没有体验到这种集成。

而且,尽管我使用了术语 Web 应用程序,但 OpenID 并非必须仅用于基于 Web 的应用程序。我预计,随着 OpenID 的普及,大量的基于互联网的应用程序,显然包括那些在 Web 上运行的应用程序,都将使用 OpenID。然而,没有理由非 Web 应用程序和服务也不能使用 OpenID。我甚至可以想象有一天,你可能会使用 OpenID 来进入你的房子或向你的防盗报警公司确认你的身份。在 OpenID 的世界中,最终用户应用程序被称为消费者,正如 OpenID 身份验证系统被称为提供商一样。

大多数 OpenID 提供商使用用户名和密码验证用户身份。随着时间的推移,我们可以预期他们也会朝其他方向发展——例如,使用生物识别身份验证系统。而且,尽管 OpenID 提供商目前免费提供他们的服务,但不难想象,在未来的某个时候,一些公司将对 OpenID 服务收费,而另一些公司将通过广告来维持自身。由于用户可以随时切换 OpenID 提供商,并且用户可以选择他们将使用哪一个,我们可以预期竞争和创造力将成为规则。

一家名为 Vidoop 的公司有一种特别有趣的身份验证机制,用户在其中选择图像图案作为他们的“密码”。每次用户想要进行身份验证时,一组图像——包括用户选择的图像——都会出现在一个 3x3 的网格上,每个图像都在一个随机选择的位置,旁边放一个随机字母。这有效地创建了一个一次性密码,用户通过输入与他们最初选择的有序图像集相关的字母来输入密码。

最后,我应该注意到,你可以创建和使用任意数量的 OpenID,就像你通常在一个网站上创建任意数量的用户名一样。有些人这样做是为了将他们的工作 ID 与他们的个人 ID 分开,或者只是因为他们不喜欢将所有的鸡蛋都放在一个身份验证篮子里。无论如何,OpenID 允许你这样做——尽管讽刺的是,一个单点登录解决方案会促使人们创建多个身份。

创建和使用 OpenID

在介绍了所有背景信息之后,让我们创建和使用一个 OpenID。OpenID 只是一个 URL,通常写成 http://USERNAME.PROVIDER.com。例如,我的 OpenID 是 http://reuvenmlerner.myopenid.com。

请注意,我可以公开分享这个 URL;我没有理由把它保密。MyOpenID.com 只是几个 OpenID 提供商之一。事实上,许多人已经拥有 OpenID,即使他们没有意识到这一点。例如,如果你在 LiveJournal 上有一个博客,那么该 URL 可以用作你的 OpenID。

要注册 OpenID,只需转到你的提供商的主页。例如,转到 MyOpenID.com 主页,然后单击“注册 OpenID”。这将带你到 https://www.myopenid.com/signup,它会要求你输入用户名(必须是唯一的)和密码。你还可以提供电子邮件地址,这是可选的,但这样做可以让你在忘记密码时恢复密码。最后,MyOpenID.com 使用验证码来确保是人而不是程序在注册帐户。

一旦你注册了 OpenID,你就可以使用它登录到支持它的网站。通常,登录网站需要你输入用户名和密码。但是,如果你使用 OpenID,你无需在 Web 应用程序的登录屏幕中输入这两者中的任何一个。相反,你只需输入你的 OpenID 的 URL,包括我们现在经常忽略的 http 前缀。

例如,我可以转到 www.wikihow.com,这是一个允许任何人创建操作指南的网站。我单击页面顶部的“创建帐户或登录”,这将我带到一个登录屏幕。出现的屏幕告诉我,如果我愿意,可以使用 OpenID 登录,方法是转到 www.wikihow.com/Special:OpenIDLogin。(换句话说,WikiHow 有两个单独的登录页面:一个用于具有用户名/密码组合的常规用户,另一个用于仅输入其 OpenID URL 的 OpenID 用户。)最后,我在文本字段中输入 http://reuvenmlerner.myopenid.com。

因为我之前已经登录了 OpenID,所以没有要求我提供密码。但是,这是我第一次尝试使用 OpenID 登录 WikiHow。因此,MyOpenID.com 必须验证我是否愿意与 WikiHow 共享信息。我单击“永远允许”按钮,这意味着每当我登录到 MyOpenID.com 时,它都应该与 WikiHow 共享信息。单击此按钮后,我被重定向回 www.wikihow.com,我在那里登录并以我的名字识别。

切换提供商

根据我的经验,这个系统运行良好,你很快就会习惯来回身份验证过程。但是,仍然存在重大问题。如果 MyOpenID.com 倒闭了怎么办?如果它的数据库被泄露了怎么办?如果它被证明是非常不道德的,并且正在使用人们的 ID 怎么办?如果我找到一个网站更吸引我的提供商怎么办?

当然,我可以随时切换到不同的提供商。但是,这实际上意味着在一个网站上拥有一个新的和不同的用户名。在社交网站上,这显然是灾难性的,因为我需要从我的新帐户重新连接到我的旧帐户中的每个人。

这个问题的解决方案非常聪明。我不给人们上面提到的 OpenID,而是给他们一个我控制的网站上的 OpenID,该网站的 URL 不太可能改变。例如,我可以提供 http://reuven.lerner.co.il 的 OpenID。

我知道 lerner.co.il 域名将永远属于我。因此,我可以合理地确定这个 URL 也将在很长一段时间内归我所有。此外,我控制主页的内容。该页面可能包含我想要的任何 HTML 内容。但是,它还应该在 <head> 部分包含以下两个 <link> 标签

<link rel="openid.server" href="http://www.myopenid.com/server" />
<link rel="openid.delegate" href="http://reuvenmlerner.myopenid.com/" />

我们已经看到了我如何通过在 MyOpenID.com 上提供我的 OpenID 来登录 WikiHow。但是,通过上面的代码行,我也可以通过输入 http://reuven.lerner.co.il 登录 WikiHow。

这告诉 WikiHow 从我的个人网站检索主页。它使用第一个 <link> 标签来了解要使用哪个服务器,并使用第二个 <link> 标签来了解要验证哪个用户名和 ID。然后一切都像往常一样继续。我根据需要针对 MyOpenID.com 验证我的身份,然后它将我重定向回 WikiHow。

这个重定向系统的美妙之处在于,如果将来我出于任何原因决定不再使用 MyOpenID,我只需更改 index.html 中的 <link> 标签。WikiHow 和所有其他网站都将跟随 reuven.lerner.co.il 指向的任何内容,无论是 MyOpenID.com、Vidoop.com 还是其他内容。通过这种方式,我确保我的 OpenID 始终与为我提供最佳安全性和可用性组合的提供商相关联。

不幸的是,事情并不总是那么顺利。例如,当我注册 WikiHow 时,它从 MyOpenID.com 获取了我的昵称 (Reuven)。当我尝试使用我的新的、重定向的 OpenID 登录时,WikiHow 认为它正在处理一个新用户——一个其请求的昵称与现有用户冲突的用户。因此,关键是要尽早设置和使用重定向 URL,而不是在你已经使用 OpenID 一段时间后才切换到它。

还存在其他问题。例如,我现在在线管理两组不同的身份,因为一些公司只想与居住在美国的美国公民打交道。而且,尽管我现在回到了以色列的莫迪因,但我仍然拥有一个美国电话号码(通过 Skype)、一个邮寄地址(在我父母的房子里)以及一个美国银行账户和信用卡。因此,我需要两个独立的身份:一个包含我的以色列信息,另一个包含我的美国信息。

幸运的是,OpenID 2.0 支持将信息导出到消费者应用程序,也支持使用多个角色。每个角色可以有单独的姓名、昵称、图像和位置,我可以选择哪个角色与每个消费者相关联,都在同一个 OpenID 的保护下。

结论

OpenID 是一种越来越重要的标准,它似乎将在未来的 Web 和互联网连接应用程序中发挥核心作用。对于最终用户来说,使用 OpenID 并不太复杂,据称它将在不久的将来集成到 Firefox 中。

下个月,我们将从需要用户注册的网站的角度来看 OpenID。作为 Web 开发人员,你如何在你的网站上支持 OpenID?我们将看到,通过一些工作,以及来自开源库的一些支持,我们可以在我们的 Web 应用程序中支持 OpenID。

资源

OpenID 信息的主要站点是 openid.net。该站点有文档、邮件列表、软件链接以及 OpenID 提供商和消费者的列表。

一个演示本专栏中许多相同想法的截屏视频可在 simonwillison.net/2006/openid-screencast 获取。

关于 OpenID 优缺点的讨论位于 radar.oreilly.com/archives/2007/02/pros_and_cons_o.html

最后,使用 OpenID 的网站列表以及你可以使用的提供商列表位于 openiddirectory.com

Reuven M. Lerner,一位长期的 Web/数据库开发人员和顾问,是西北大学学习科学专业的博士候选人,研究在线学习社区。在芝加哥地区生活了四年后,他最近(与他的妻子和三个孩子)返回了他们在以色列莫迪因的家。

加载 Disqus 评论