原文作者: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——但对用户来说,这却是一个讨厌的经济命题:要么在令人费解的流程里一次性折腾30分钟,要么在每一个网站上都花两分钟快速过一遍熟悉的流程(他们以前已经做过无数次了)——人们都很忙,一般总是会选择自己熟悉的方法。我敢打赌,大部分人会继续使用私有ID——赌什么都行!这将进一步延迟采纳OpenID可能带来的网络效应。
在Jan Miksovsky抛出的观点中,最引人注目的也许是这个:让用户把自己与一个随意的URL(而不是Email地址)关联在一起,这是有点古怪的!在今天的试验中,我也确实看到了一些网站不修边幅的情况。但我想说的是,自从Jan当初研究了OpenID以来,OpenID的用户体验已经有了提升。这让人很受鼓舞!
我知道,OpenID远不是一个理想的解决方案。但是在眼下,“每个网站都有单独的登录账号”的问题已经非常严重,以致于我愿意接受一些折中方案,以免情况继续恶化下去。我绝不可能把我的银行账号与OpenID绑定。但是,还有很多其他的网站,我不需要它们达到银行那样的安全级别,而我使用它们的频率远远高于我的银行账号。要记住所有这些网站上的登录账号——一旦密码忘记了,我的Email收件箱就成了事实上的集合点和安全通道——所有这些痛苦累加起来,是巨大的、实实在在的!
如果你是一位软件开发者、你在做一个需要用户登录的应用程序,请考虑采用OpenID,而不是让用户创建新的用户名/密码来继续玷污这个世界。我也鼓励你以用户的身份去试验一下OpenID:创建一个OpenID账号,然后用它去登录某个支持OpenID的网站(比如StackOverflow.com)。如果你不喜欢这种体验,或者如果你在我前面列出的批判中同意其中的一点(或者更多),请想一想:我们怎么一起来解决呢?对于“登录爆炸”问题,我们急切地需要一个解决方案。但是在眼下,我看到的唯一有希望的只有OpenID(尽管它饱受非议)。
如果我们不能让OpenID至少应用到一些低价值的一般性网站上,我们对解决“登录爆炸”问题还能抱有什么希望呢?
推荐阅读:关于网络密码的可怕真相
分享到:
相关推荐
OpenIDLoginGenerator用于快速创建使用OpenID进行身份验证的Rails应用程序 ActiveRecordOpenIDStore插件 全面的测试套件 透明地支持OpenID 1和OpenID 2 正在安装 在运行示例或编写您自己的代码之前,您需要安装该库...
目前的网站都是依靠用户名和密码来登录认证,这就意味着大家在每个网站都需要注册用户名和密码,即便你使用的是同样的密码。如果使用 OpenID (参见规范),你的网站地址(URI)就是你的用户名,而你的密码安全的...
检查SSO名称空间中的credential-sso Kubernetes Secret以获取管理员用户名和密码 3scale API管理 用户名: admin 密码:密码 Web应用程序 用户名: statepolice 密码:密码 Github回购: : 背景 Sha
OpenID是帮助你使用相同的用户名和口令登录不同的网站的一种解决方案。如果你对OpenID不熟悉的话,你可以到这里看看:http://openid.net.cn/
小程序获取openid,看之前的官方文档写的不清楚,自己摸索后才发现很简单,当修改secret后记得在文件里更新密码和qppId,这是个坑
OpenID是一种,使用户无需创建新密码即可向网站进行身份验证。 该插件允许用户使用OpenID登录到其本地WordPress帐户,并允许评论者使用OpenID留下经过身份验证的评论。 该插件还包括一个OpenID提供程序,使用户可以...
openid客户端 openid-client是Node.js运行时的服务器端依赖方(RP,Client)实现,支持 。 实施的规格和功能 OpenID Connect / OAuth2.0规范中的以下客户端/ RP功能是由openid-client实现的。 授权回叫 授权码流程 ...
入门安装Opauth-OpenID: cd path_to_opauth/Strategygit clone git://github.com/opauth/openid.git OpenID 或者 composer require opauth/openid配置Opauth-OpenID策略。 (请参阅下一节) 将用户...
请给我发电子邮件bugzilla-openid === 为 Bugzilla 提供 OpenID 支持所需模块bugzilla-openid 需要 Net::OpenID::Consumer 才能使用那些美味的 OpenID url。关于该插件是 Synthetic Intellect Institute 背后团队的...
ORY Hydra是经过强化,经过OpenID认证的OAuth 2.0服务器和OpenID Connect提供商,针对低延迟,高吞吐量和低资源消耗进行了优化。 ORY Hydra不是身份提供者(用户注册,用户登录,密码重置流程),而是通过连接到您...
适用于Android的AppAuth是用于与和提供程序进行通信的客户端SDK。 它努力遵循那些惯用的实现语言样式,直接映射那些规范的...implementation ' net.openid:appauth:0.8.1 ' 要求 AppAuth支持Android API 16(Jellybea
Redmine OpenID Provider插件 这个插件使Redmine可以充当OpenID提供者。 安装与设定 将您的插件目录复制到#{RAILS_ROOT} / plugins中。 如果您是直接从GitHub下载插件,则可以通过转到插件目录并发出以下命令来执行...
OpenID连接这是使用Java EE核心技术(例如Servlet和JASPIC)的OpenID Connect实现的实现。 这是从项目中提取的,目的是简化客户端和服务器端组件的代码库。 它包含以下组件: openid-connect-core:包含客户端和...
微信小程序获取用户openId的实现方法 前端: wx.login({ success: function (res) { res.code }) 获取到code后,传到后台, 然后请求微信接口 ...把参数替换为自己的参数,这个接口就直接返回openId了 ...
赫鲁库本地使用创建环境变量对于数据库连接名称:DATABASE_URL值:postgres://用户名:密码@ 127.0.0.1:5432 / appchallenge 对于消费者OAuth资源名称:消费钥匙值:<<您的钥匙>> 名称:消费者秘密价值:...
本代码作用于前后端分离获取微信openId,调用说明:在api中新建一个Default.aspx页面,复制文件中代码到页面中,修改appid,key,webAddr值。部署api;前端跳转url:api地址+“/efault.aspx?reurl="+前端页面地址;如果...
c#获取微信公众号openid,并根据公众号openid获取微信用户名用户信息与头像等,简单易懂。
微信h5授权获取用户openId的方法和步骤,用于用户登录和注册,代码已经封装好,下载就能用
OpenID Connect服务器和客户端库 安装 gem install openid_connect 资源 在GitHub上查看源代码( ) 在GitHub上报告问题( ) 订阅更新信息( ) 例子 提供者¶ ↑ 在Heroku上运行( connect-op.herokuapp....
Node.js的OpenID Node.js的OpenID是(是的,您猜对了)Node.js的OpenID实现。 重点和功能包括: 完全符合OpenID 1.0 / 1.1 / 2.0的依赖方(客户端)实施 非常简单的API 关联状态的简单扩展点 下载 该库可以进行...