网站的无密码登录

大部分网站,都要求用户登录。

常见的做法,是让用户注册一个账户。


这种做法并不让人满意。

对于用户来说,每个网站必须记住一个密码,非常麻烦;对于开发者来说,必须承担保护密码的责任,一旦密码泄漏,对网站的业务和信誉都是巨大打击

所以,很早以前,人们就开始设想"无密码登录"(password-less login)。这对用户和网站,都将是极大的减负。

本文先回顾"无密码登录"的几种常见做法,然后探讨一种最简单的实现。

一、OpenID

OpenID是最早提出的一种无密码登录。


它的设想是这样的:互联网上每一个网址(URL),都指向一个独一无二的网页,这说明网址具有唯一性。因此,可以用网址来标识用户。

所以,使用OpenID的网站,不要求用户输入"用户名",而要求用户输入一个代表其身份的网址。然后,向该网址进行求证,如果得到证实,就允许用户登录,从而实现"无密码登录"。

OpenID有两个很大的缺点:一是需要服务器端支持,二是使用网址表示身份,违背直觉,普通用户难以理解。因此,始终无法得到推广。

二、第三方账户

OpenID的实质,是让第三方网站认证用户身份。那么很显然,这等同于用户在第三方网站登录。

因此,可以直接告诉用户,使用第三方帐号登录(前提是对方支持OpenID)。


这样做的优点是比较直观,用户容易接受;缺点是自身的业务,从此多多少少要依赖第三方网站。比如,现在很多网站使用Facebook帐号登录,一旦Facebook出现故障,这些网站都会受到影响。

三、Persona

去年,Mozilla提出了Persona方案,号称是无密码登录的终极解决方案


它与OpenID异曲同工。后者用网址标识用户,它用Email标识用户。用户键入Email地址以后,网站向Email服务器请求认证。

虽然这种方案还处在推广期,效果有待观察。但是,我目前不太看好它。一则,它的技术要求流程,比OpenID更复杂,无法用一句话讲清楚;二则,它要求服务器端支持,很难想象世界上大部分Email服务器都会部署Persona代码。

四、OAuth

OAuth协议其实与"第三方帐户"是一回事。


"第三方账户"是第三方网站提供用户身份认证,属于"认证"服务(authentication);OAuth则是更进一步,第三方网站允许你直接操作它的用户数据,属于"授权"服务(authorization)。

因为涉及到用户数据的改变,所以OAuth认证比Openid认证要求更严格。通常,只有针对某个第三方网站的外部服务,才需要用到OAuth;如果只是单纯地区分用户身份,其实没必要用它。

五、Email一次性登录

上面四种登录方法,是目前主流的"无密码登录"。下面,我想介绍一种最简单的实现,它是美国程序员Ben Brown在今年7月份提出来的。

他的做法很简单。用户登录的时候,只显示一个Email地址输入框。


用户输入Email地址以后,网站就向该地址发出一封邮件,里面包含了一个登录链接。用户点击这个链接,就证明他/她确实是这个邮箱的主人,身份有效,从而实现登录。


登录链接只在一段时间内有效,但是可以通过cookie,让用户长时间处在登录状态。如果cookie失效,则重新向用户邮箱发出另一个登录链接即可。

由于整个认证过程,都通过电子邮件完成,彻底实现"无密码登录",而且操作流程很自然,易于理解。更重要的是,它使用现有的Email协议,不需要服务器端部署新的代码,具有最好的兼容性。

主要缺点是,它需要用户额外查看一次邮箱,稍显麻烦;它也不适合那种用户无法打开Email的场合,比如在朋友家中上网。因此,使用它的网站,还必须部署备用的登录方式。

总的来说,我觉得这是一个简单易行的好方法,以后做网站的时候,打算尝试一下。

想听听大家的意见,你觉得这种方法可行吗?

时间: 2024-09-29 00:12:19

网站的无密码登录的相关文章

无密码登录技术

无密码登录技术 在Mozilla,我帮助开发一个不依赖密码的登录系统.它也不使用诸如Facebook之类的社会化平台的登录.我认为我们已经创造了并行的替代方案--我乐于看到被使用,被其他设计师和开发者继续推动发展.当我们彼此身边的.需要密码的网站越少,被忘记的.被盗的.跨站点用一个密码的情况就会越少. 加入按钮 在本文,你可以了解到系统设计和用户体验.如果你对整个事情感兴趣,可以移步到Webmaker blog上的文章. 加入--快速.简单 我们简化了加入Webmaker的流程.以前,在人们能够

CentOS下SSH无密码登录的配置文件_Linux

1.确认本机sshd的配置文件(需要root权限) $ gedit /etc/ssh/sshd_config 找到以下内容,并去掉注释符"#" RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys 2.如果修改了配置文件需要重启sshd服务 (需要root权限) $ /sbin/service sshd restart 配置SSH无密码登录需要3步: 1.生成公钥和私

Linux命令之远程登录/无密码登录-ssh,ssh-keygen,ssh-copy-id

SSH是一种安全通道协议,主要用来远程登录.在RHEL 5系统中使用的是OpenSSH服务器由openssh, openssh-server等软件包提供的(默认已经安装),并以将sshd添加为标准的系统服务.使用方法如下: $ ssh host $ ssh username@host $ ssh -p 222 username@host -p:指定访问端口;如果省略该参数,则默认访问SSH服务的默认端口22; 如果是第一次登录对方主机,则系统会出现一下提示: The authenticity o

java web网站集成新浪微博登录

  给网站添加第三方登录的功能,研究了下新浪微博登录的接口,本来想使用它提供的那种js代码库的方式,结果始终搞不定,由于不精通js只能够放弃.下载了个java的SDK包:weibo4j-oauth2-beta2.1.1,研究了下,虽然出了一些问题,但还是很快集成到网站里面了. 首先,把一些必要的包和java类负责到自己的工程文件: 修改config文件里面的client_ID,client_SERCRET,redirect_URI. 自己在登录页面写一个微博登录按钮,超链接到名字为OAuth4C

Linux远程登录和无密码登录方法

  一.远程登录方法 SSH 是一种安全通道协议 , 主要用来远程登录.在 RHEL 5 系统中使用的是 OpenSSH 服务器由 openssh , openssh-server 等软件包提供的 ( 默认已经安装 ) ,并以将 sshd 添加为标准的系统服务. 使用方法如下: 代码如下: $ ssh host $ ssh username@host $ ssh -p 222 username@host -p: 指定访问端口 ; 如果省略该参数 , 则默认访问 SSH 服务的默认端口 22; 如

实现Win8的无密码登录的方法

  Win8系统是默认需要用户输入微软账户的,但如果用户的电脑只是家用,实在没必要每次都去输入密码.下面笔者将介绍一种能实现无密码登录Win8系统的方法. Win8大百科41期:实现Win8的无密码登录 实现Win8的无密码登录 与Win7一样,Win8可以实现指定帐户的无密码的自动登录. 方法如下: 运行"netplwiz" 1.通过"Win+R"快捷键调出"运行"框内,输入"netplwiz",进入账户管理界面; 选择账户

以root账号登录 执行ssh user@ipaddr 如何实现 无密码登录

问题描述 以root账号登录 执行ssh user@ipaddr 如何实现 无密码登录 有A B两台机器,设A为server(ip:1.1.2.197),B为client(ip:1.1.2.195),现在以root账号登录A机器,想要远程访问B,以cloud账号登录,执行 ssh cloud@1.1.2.195,请问该如何实现? 解决方案 不输入密码自动通过SSH方式登录服务器 冷胜魁(Seaquester)lengshengkui@gmail.com 2009-7-1 看到ChinaUnix上

ssh无密码登录问题

ssh无密码登录配置: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak vi /etc/ssh/sshd_config 重启sshd /etc/rc.d/init.d/sshd restart cat ~/id_rsa.pub >> /root/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys ssh root@192.168.82.3 cat id_rsa.pub >> a

asp.net用httpwebrequest登录其他网站之后如何跳转到其他网站并保持登录状态

问题描述 asp.net用httpwebrequest登录其他网站之后如何跳转到其他网站并保持登录状态 我在自己网站用httpwebrequest登录了另一个网站,我想跳转过去并且保持登录状态,这个cookie该怎么处理. 或者不用httpwebrequest有什么其他好方法.