原文作者:Jeff Atwood

随着Stack Overflow开发工作的逐步深入,我们不可回避地碰到了这个问题:我们需要让用户登录,即使网络上用户名/密码已经泛滥成灾,我们也只能随波逐流。我已经有50对用户名/密码了。我根本记不住它们。但是,为StackOverflow.com再增加一对又何妨呢?

在我的朋友Jon Galloway的力劝之下,我打算看一看OpenID。OpenID的目标就是要解决这个“登录爆炸”的问题:

有了OpenID,你就不必在不同的网站上分别创建用户名了——它能让你的上网体验变得更加简易。

你需要选择一个最符合你要求的OpenID供应商,最重要的是,你要信任它。并且,不管你选择哪个供应商,你都可以一直保留你的OpenID。最最美妙的是,OpenID技术并不是私有的,而且它完全免费。

秉着“少说、多做”的精神,接下来,我将解释OpenID的工作原理。

让我们假设你第一次访问某个新的网站。在随意浏览之后,你最终想做一些匿名访客没有权限做的事情。于是,你会被带到一个“创建新账号”之类的页面。我相信,每个人都碰到过这种情况。但是,如果这个网站支持OpenID,你就可以跳过创建新账号所需的那些繁琐步骤。在这种情况下,你只须输入你的OpenID:

为了简单起见,假设你已经有了一个OpenID账号。坦率地说,这种假设并不过分。事实上,所有美国在线和雅虎的用户都已经有了一个OpenID账号(即使他们自己还没意识到这一点)。

从技术上来说,OpenID其实就是URL。下面是几个例子:

  • http://claimid.com/yourname
  • http://yourname.signon.com
  • https://me.yahoo.com/yourname

这里有一个可用性问题:与记住Email地址比起来,你必须记住相对完整的OpenID URL,而且各个OpenID供应商定义的格式还各不相同。面对这个问题,尽管也有巧妙的方法(我会在后面提到),但眼下的ID选择控件也不赖,它提供了相当友好的界面来协助用户完成OpenID URL的构建。

如果你输入的URL是正确的,你会被重定向到OpenID供应商的网站,然后你在那儿输入你唯一的一对用户名/密码。

你会看到提示,要求将你当前访问的这个网站加入到供应商的“可信网站”列表里,并与你的账号绑定。一旦你做了这一步,下次再访问这个网站的时候你就可以省去所有这些步骤了。

最后,你总算完成了首次登录!

如果整个过程看起来挺费周折的——注意,我还没算上创建最初的ClaimID账号的时间呢——没错,我不想骗你,你需做的事情确实更多了。但是,值得注意的是:

  • 在OpenID供应商网站上创建账号的成本最终可以分摊到几十个能接受OpenID的网站上,因为你将使用同一对用户名/密码在这些网站上登录。
  • 对于一个特定的网站,在第一次使用OpenID登录时稍显麻烦,但后续的登录只需一次点击就可完成(假设你在第一次登录时已将这个网站加入了“可信网站”列表)。

OpenID并不完美,但跟必须为50个不同的网站记住50个不同的用户名和密码比起来,它已经是一个很大的进步了。你难道不这么认为吗?我认为它可以与“无阻力沟通”方面的冠军(匿名评论框)一比高下。匿名评论框通常要求填写3块内容:用户名、URL和Email。而OpenID只要求一个。如果你选择的供应商巧妙地支持了“属性交换”,你的URL和Email会被代理、自动从供应商的配置中转回到你所访问的网站。

这就引出了OpenID的另一个问题。你使用OpenID的体验如何,很大程度上取决于你所选择的供应商。比如,雅虎就很聪明,即使你只输入了“yahoo.com”作为OpenID URL,它照样能工作。(假设你已经为你的雅虎账号设置了OpenID的支持。)供应商还可以提供一些独特的功能,使自己有别于其他供应商。例如,SignOn.com允许使用Windows上的信息卡,这样的话,你甚至不用输入任何密码就可以登录一个网站。当然,你需要做一些准备工作,也就是要预先把你的供应商账号与信息卡关联起来。我试过了,正如广告上所说的那样,这种方法行得通。

在试验过OpenID之后,我的感觉还是相当正面的。不过,摆在OpenID面前的也不尽是美酒与鲜花。Stefan Brands经过详尽的论证,他在“The Problem(s) with OpenID”一文中指出了OpenID的一些潜在的大问题:

  • 钓鱼。一个恶意网站可能访问你提供的OpenID URL,监视登录表单,然后窃取你的用户名和密码。然而,如果你选择的是一个优质的OpenID供应商,他们会使用SSL和高级证书,于是你有理由相信你不会被愚弄。雅虎还为OpenID登录提供了图片水印,以此作为反钓鱼的一种手段。
  • 隐私。你选择的OpenID供应商知道你通过它的账号访问的所有网站。这是理所当然的。但愿你选择的供应商是信得过的。
  • 风险高度集中。如果你的OpenID账号被人盗用了,你用它登录过的所有网站全都会遭殃。跟Email账号被盗用比起来——很多(大部分?)网站允许你使用Email来重置密码——我不确定OpenID账号被盗用的危险是不是更大。
  • 信任缺失。OpenID供应商不做任何身份认证。它有点像那些你可以在网上轻易获取的“标识卡”,跟你的驾驶证比起来(它可是由权威的当地政府部门颁发的),OpenID在标示身份方面毫无用处。假如有人创建了一个假的OpenID账号来冒充史蒂夫•乔布斯,或者OpenID供应商本身就是个冒牌货,结果会怎么样呢?
  • 额外的复杂。现在,登录过程会牵涉两个完全不同的实体:一个是你试图访问的网站,另一个是OpenID供应商的网站。你必须理解两者之间的这种关系,才能排解你在登录过程中碰到的任何问题。另外,OpenID供应商的服务必须保持稳定运转,否则你根本无法完成登录。
  • 接受度不一。对于美国在线、雅虎、Six Apart和Technorati这些公司来说,他们很容易就成为了OpenID的供应商,但如果很少人去用OpenID,这又有什么意义呢?正如Dare Obasanjo在“A Proposal for Social Network Interoperability via OpenID”(通过OpenID实现社交网络交互性的一个提议)一文中指出的那样,接受竞争对手的账号缺乏经济方面的动机,而推动用户在自己的网站上创建账号却有大量的“油水”。从目前来看,OpenID主要是由一些小型应用和网站来推动的,因为它们的业务没有几百万美元这么大的诱惑。

正如我前面所说的,我觉得这些诟病中的大部分都可以通过选择一个值得信赖的优质OpenID供应商来避免。特别是,你选择的供应商须使用SSL。既然这是一个开放的生态系统,我希望更多有良好信誉、可靠的OpenID供应商能够挺身而出。考虑一下它的优点吧:作为应用程序的开发者,你不再需要顾及如何存储密码了!这是一个巨大的好处,因为你要尽可能避免存储用户的密码。你一定要听我这句话!

我还发现了Jan Miksovsky在2007年8月发表的一篇文章,题为“OpenID:Great idea, bewildering consumer experience”(OpenID的想法不错,但用户体验让人很困惑)。他在文中痛快淋漓地批判了OpenID的用户体验:

这究竟是为啥?就为了让我不必选择一对用户名和密码吗?尽管那很无聊,但也不算太难吧!记住一个随意的用户名确实挺麻烦的,但只要允许Email地址用作ID几乎就可以解决所有的问题。随着越来越多的网站允许Email地址作为ID来登录,用户对OpenID的需求就没那么迫切了。

为了共享ID的一点边际效益,一个理智的运营商会愿意折磨他们的用户吗?至少在眼下,那是无法想象的。我看到很多人宣称,只要像谷歌这样的大佬支持一下OpenID,问题便会迎刃而解。遗憾的是,不管公司规模是大是小,他们都承受不起用户的流失。

分钟,要么在每一个网站上都花两分钟快速过一遍熟悉的流程(他们以前已经做过无数次了)——人们都很忙,一般总是会选择自己熟悉的方法。我敢打赌,大部分人会继续使用私有ID——赌什么都行!这将进一步延迟采纳OpenID可能带来的网络效应。

在Jan Miksovsky抛出的观点中,最引人注目的也许是这个:让用户把自己与一个随意的URL(而不是Email地址)关联在一起,这是有点古怪的!在今天的试验中,我也确实看到了一些网站不修边幅的情况。但我想说的是,自从Jan当初研究了OpenID以来,OpenID的用户体验已经有了提升。这让人很受鼓舞!

我知道,OpenID远不是一个理想的解决方案。但是在眼下,“每个网站都有单独的登录账号”的问题已经非常严重,以致于我愿意接受一些折中方案,以免情况继续恶化下去。我绝不可能把我的银行账号与OpenID绑定。但是,还有很多其他的网站,我不需要它们达到银行那样的安全级别,而我使用它们的频率远远高于我的银行账号。要记住所有这些网站上的登录账号——一旦密码忘记了,我的Email收件箱就成了事实上的集合点和安全通道——所有这些痛苦累加起来,是巨大的、实实在在的!

如果你是一位软件开发者、你在做一个需要用户登录的应用程序,请考虑采用OpenID,而不是让用户创建新的用户名/密码来继续玷污这个世界。我也鼓励你以用户的身份去试验一下OpenID:创建一个OpenID账号,然后用它去登录某个支持OpenID的网站(比如StackOverflow.com)。如果你不喜欢这种体验,或者如果你在我前面列出的批判中同意其中的一点(或者更多),请想一想:我们怎么一起来解决呢?对于“登录爆炸”问题,我们急切地需要一个解决方案。但是在眼下,我看到的唯一有希望的只有OpenID(尽管它饱受非议)。

如果我们不能让OpenID至少应用到一些低价值的一般性网站上,我们对解决“登录爆炸”问题还能抱有什么希望呢?

推荐阅读关于网络密码的可怕真相

OpenID倡议:别再创建新的用户名和密码的更多相关文章

  1. linux创建新用户以及修改密码

    1. 使用root账户创建新用户 useradd webuser 2. 修改新增的用户的密码 passwd webuser 这时候会提示你输入新的密码: 注意:不要用su webuser进入该账户修改 ...

  2. Pycharm 创建 Django admin 用户名和密码

    1.  问题 使用PyCharm  创建完Django 项目  想登录admin  页面   却不知道用户名和密码. 用的默认sqlit   2.解决办法   2.1 打开manage.py 控制界面 ...

  3. Pycharm创建Django admin用户名和密码

    1.Tools>Run manage.py Task 2.依次输入: makemigrations migrate createsuperuser 如: manage.py@production ...

  4. cassandra用户名和密码的设置

    设置Cassandra使用用户名和密码验证的步骤如下: 1.修改${CASSANDRA_HOME}/conf/cassandra.yaml,把authenticator: AllowAllAuthen ...

  5. Linux下如何创建新用户

    Linux下如何创建新用户 Linux系统中,只有root用户有创建其他用户的权限.创建过程如下:   useradd -d /home/newuser newuser(设定了该用户的主目录和用户名) ...

  6. MySQL创建新用户、增加账户的2种方法及使用实例

    可以用两种方式创建MySQL账户:1.使用GRANT语句2.直接操作MySQL授权表最好的方法是使用GRANT语句,因为这样更精确,错误少.创建超级用户: mysql> GRANT ALL PR ...

  7. linux命令创建和修改用户及密码

    linux下创建用户 1.添加ftp用户 useradd ftpname -d /home/ftp passwd ftppwd 以下操作都以root权限进行: service vsftpd start ...

  8. Git Pull 避免用户名和密码方法

    在开发中使用的版本控制器时git , 每次使用命令"git pull"从服务器获得最新代码时,都需要输入用户名和密码,这样浪费了大量的时间和热情,在此背景下,本文在网上找到解决版本 ...

  9. htpasswd建立和更新存储用户名、密码

    htpasswd建立和更新存储用户名.密码的文本文件, 用于对HTTP用户的basic认证. # /usr/local/apache/bin/htpasswd --help Usage: htpass ...

随机推荐

  1. CSS 浏览器默认样式

    不要再说div天生就是block——这句话应该换成:浏览器默认样式天生规定了div是block——所以才导致了div是block!是默认样式规定的,不是浏览器的内核规定的. 没有设置block的元素, ...

  2. HTML注释简介

    HTML注释简介   在编写HTML代码时,我们经常要在一些关键代码旁做一下注释,这样做的好处很多,比如:方便理解.方便查找或方便项目组里的其它程序员了解你的代码,而且可以方便以后你对自己代码进行修改 ...

  3. 彻底解决TAP(点透)提升移动端点击响应速度

    使用fastclick 尼玛使用太简单了,直接一句: FastClick.attach(document.body); 于是所有的click响应速度直接提升,刚刚的!什么input获取焦点的问题也解决 ...

  4. 如何让tableView展示数据

    设置数据源对象 self.tableView.dataSource = self; 数据源对象要遵守协议 @interface ViewController () <UITableViewDat ...

  5. 阿里大鱼短信接口整合Tp3.2.3开发整理

    阿里大鱼 http://www.alidayu.com/ 的短信接口总体是不错的,别安驹个人认为不管是从性价比还是稳定性上都是跟同类的短信接口好些,毕竟是大公司的东西不会差到哪去.下面把之前开发的短信 ...

  6. zrender源码分析1:总体结构

    开始 zrender(Zlevel Render) 是一个轻量级的Canvas类库,这里是GitHub的网址 点我, 类似的类库有Kinetic.JS.EaselJS. 但貌似都没有zrender好用 ...

  7. PHP框架学习之Laravel安装

    自从接触PHP以来一直使用Yii,感觉Yii实现功能比较简单,是一个很不错的框架.最近由于工作的原因开始研究Laravel5,不得不说我在第一步安装就被坑着了,下面就是我痛苦的学习成果.Laravel ...

  8. MySQL 有输入输出参数的存储过程实例

    1.MySQL 有输入输出参数的存储过程实例 DELIMITER // DROP PROCEDURE IF EXISTS `test`.`p_getvalue` // CREATE PROCEDURE ...

  9. Ubuntu安装Microsoft Windows Fonts微软字体库

    ttf-mscorefonts-installer包是微软的字体包, 可以直接在软件中心中找到安装,也可以通过命令安装 sudo apt-get install ttf-mscorefonts-ins ...

  10. python-凯撒密码

    凯撒密码 简介:凯撒密码(Caesar)是最早的代换密码,对称密码的一种 算法:将每个字母用字母表中它之后的第k(称作位移值)个字母替代 代码: #-*-coding:utf-8-*- __autho ...