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 ...
随机推荐
- JavaScript 中 关于 this 的学习笔记
今天上午主要学习了js中的 this ,因为之前学习面向对象时,this这个东西出现的还是很频繁的,理解的很不透彻,感觉老被JAVA的思想带进坑里,所以对它特别关注. 首先贴一个大神的一篇博客,我是通 ...
- Parallel多线程
随着多核时代的到来,并行开发越来越展示出它的强大威力!使用并行程序,充分的利用系统资源,提高程序的性能.在.net 4.0中,微软给我们提供了一个新的命名空间:System.Threading.Tas ...
- 解決 IE10 浏览器无法使用 ASP.NET From 验证登录的问题
最近应项目用到ASP.Net表单验证机制(FormsAuthentication),来判断用户是否已经登录,一切测试顺利,最后发布到IIS中后在IE10测试是发现始终判断用户没登录(其他浏览器一切正常 ...
- ajax.request函数使用详解
Ajax.Request ? Ajax.Request( url, { method:method, parameters:para, postBody:xmlString, asynchrono ...
- 【JQ学习笔记】提示的效果
<p><a href="#" class="tooltip" title="这是我的超链接提示1.">提示1.< ...
- 下载PHPDroid: 基于WebView和PHP内置HTTP服务器开发Android应用
基于Android上的PHP(比如我打包的PHPDroid),寥寥几行PHP代码,就能实现一个支持无线局域网用浏览器访问的Android手机的Shell,用于执行命令和PHP代码. 个人在 ...
- 稠密图(邻接矩阵),并查集,最短路径(Dijkstra,spfa),最小生成树(kruskal,prim)
全部函数通过杭电 1142,1162,1198,1213等题目测试. #include<iostream> #include<vector> #include<queue ...
- liunx下NetworkManager导致网卡不能启动
前几天在客户现场,配置一台系统为redhat 6.0的服务器,这台服务器是IBM x3755,系统是预装的.在把服务器的IP地址配置完成后,使用命令不能启动网卡.提示:弹出界面 eht0:错误:激活链 ...
- Oracle EBS-SQL (INV-4):检查负库存记录数.sql
DEFINE DATE1="01/15/20** 23:59:59" /*输入指定日期*/DEFINE CODE="%" ...
- Android 为应用添加数字角标
今天在论坛上看到了一个帖子,终于搞清了我很久以来的一个困惑,android到底能不能实现ios的角标效果,QQ是怎么实现的.看了这个帖子顿时终于解除了我的困惑. 先说一个下大概的思路: 大家都知道an ...