OpenID倡议:别再创建新的用户名和密码
原文作者: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倡议:别再创建新的用户名和密码的更多相关文章
- linux创建新用户以及修改密码
1. 使用root账户创建新用户 useradd webuser 2. 修改新增的用户的密码 passwd webuser 这时候会提示你输入新的密码: 注意:不要用su webuser进入该账户修改 ...
- Pycharm 创建 Django admin 用户名和密码
1. 问题 使用PyCharm 创建完Django 项目 想登录admin 页面 却不知道用户名和密码. 用的默认sqlit 2.解决办法 2.1 打开manage.py 控制界面 ...
- Pycharm创建Django admin用户名和密码
1.Tools>Run manage.py Task 2.依次输入: makemigrations migrate createsuperuser 如: manage.py@production ...
- cassandra用户名和密码的设置
设置Cassandra使用用户名和密码验证的步骤如下: 1.修改${CASSANDRA_HOME}/conf/cassandra.yaml,把authenticator: AllowAllAuthen ...
- Linux下如何创建新用户
Linux下如何创建新用户 Linux系统中,只有root用户有创建其他用户的权限.创建过程如下: useradd -d /home/newuser newuser(设定了该用户的主目录和用户名) ...
- MySQL创建新用户、增加账户的2种方法及使用实例
可以用两种方式创建MySQL账户:1.使用GRANT语句2.直接操作MySQL授权表最好的方法是使用GRANT语句,因为这样更精确,错误少.创建超级用户: mysql> GRANT ALL PR ...
- linux命令创建和修改用户及密码
linux下创建用户 1.添加ftp用户 useradd ftpname -d /home/ftp passwd ftppwd 以下操作都以root权限进行: service vsftpd start ...
- Git Pull 避免用户名和密码方法
在开发中使用的版本控制器时git , 每次使用命令"git pull"从服务器获得最新代码时,都需要输入用户名和密码,这样浪费了大量的时间和热情,在此背景下,本文在网上找到解决版本 ...
- htpasswd建立和更新存储用户名、密码
htpasswd建立和更新存储用户名.密码的文本文件, 用于对HTTP用户的basic认证. # /usr/local/apache/bin/htpasswd --help Usage: htpass ...
随机推荐
- html网页获取php网页数据等知识记录
所有跟php有关的网页都必须在Apache服务器下打开.需要配置好confg.ini的文件路径. AJAX: 通过事件不断的向服务器发送请求,然后服务器会时时返回最新的数据,这就是AJAX的功能 PS ...
- JAVASCRIPT——文字出现效果练习
写一句诗.诗的最初状态是隐藏的,效果是让诗缓慢出现,直到显示完全 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...
- 简述UITextField的属性和用法
0. enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. 1.borderStyle ...
- 【IOS学习基础】内存管理
1.内存几大区域 1> 栈区:局部变量(基本数据类型.指针变量). 2> 堆区:程序运行的过程中动态分配的存储空间(创建的对象). 3> BSS段:没有初始化的全局变量和静态变量. ...
- Unity之GUI控件
在这里就贴一个连接吧:GUI
- python基础教程
转自:http://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html Python快速教程 作者:Vamei 出处:http://www.cn ...
- ACID:数据库事务正确执行的四个基本要素
ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...
- JavaScript学习之—prototype
一.利用prototype扩展String方法,去除字符前后空格: String.prototype.trim = function String$trim() { if (arguments.len ...
- 仍需"敬请期待"的微信沃卡
从2013年7月30日广东联通联合腾讯公布将合作推出联通沃卡,到8月5日在易迅网上进行预订,8月8日正式发售,再到本人最近几日拿到预订的实卡,已经过去20多天了.于是乎,我怀着无比期待的 ...
- 【转】浅析terminal创建时ptmx和pts关系
我们打开一个terminal,那么将会在devpts文件系统/dev/pts下创建一个对应的pts字符文件,该pts字符文件节点直接由/dev/ptmx节点的驱动函数ptmx_open()调用de ...