|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
大部分网站,都要求用户登录。1 k- I+ d8 x+ \1 ]
常见的做法,是让用户注册一个账户。0 u0 v7 K3 Z( e! g% X& P
$ F8 n2 z ~4 P' z
) f8 N" r6 a8 v; x1 K( V" U: }3 Q2 [这种做法并不让人满意。
6 k' ^9 C% b' T L% l( m对于用户来说,每个网站必须记住一个密码,非常麻烦;对于开发者来说,必须承担保护密码的责任,一旦密码泄漏,对网站的业务和信誉都是巨大打击。
2 c3 {6 b; Y: A, v. g% w8 i5 D. I( {所以,很早以前,人们就开始设想无密码登录(password-lesslogin)。这对用户和网站,都将是极大的减负。
0 N) U* Q( U( x7 q4 x本文先回顾无密码登录的几种常见做法,然后探讨一种最简单的实现。
) e6 ~4 H+ @, ^% E一、OpenID
}" Y7 r. Z1 l5 }* n0 bOpenID是最早提出的一种无密码登录。' D3 ~4 j2 W. E2 b% V2 E- L
$ l3 z7 q) ~9 F7 ~; {( o+ ]# Z3 b" m( {% K8 v0 ?$ T, c! y. d
它的设想是这样的:互联网上每一个网址(URL),都指向一个独一无二的网页,这说明网址具有唯一性。因此,可以用网址来标识用户。1 O- ?& ~) L: @: [
所以,使用OpenID的网站,不要求用户输入用户名,而要求用户输入一个代表其身份的网址。然后,向该网址进行求证,如果得到证实,就允许用户登录,从而实现无密码登录。7 e2 r2 H* ^; K* ]% d+ f% _2 _4 t
OpenID有两个很大的缺点:一是需要服务器端支持,二是使用网址表示身份,违背直觉,普通用户难以理解。因此,始终无法得到推广。
& C& ?3 x9 q/ N6 C二、第三方账户9 V0 V% P; d* V# U$ Y% w ]
OpenID的实质,是让第三方网站认证用户身份。那么很显然,这等同于用户在第三方网站登录。, E4 k& _2 H0 H6 N& {
因此,可以直接告诉用户,使用第三方帐号登录(前提是对方支持OpenID)。
. v- }! ?( B# A3 P# A. A) k6 D' y. ?7 V0 a c7 [' s/ d6 n
; N% O. w8 X, [& G" A这样做的优点是比较直观,用户容易接受;缺点是自身的业务,从此多多少少要依赖第三方网站。比如,现在很多网站使用Facebook帐号登录,一旦Facebook出现故障,这些网站都会受到影响。
( J6 ~( b) J+ Y: r三、Persona5 {3 ^# r7 N K6 |( M6 o4 k
去年,Mozilla提出了Persona方案,号称是无密码登录的终极解决方案。% Q7 P. _: N+ B8 ]9 f/ w7 U5 X
; B# {* U6 b8 p0 v
( ~; j3 }: C- k H2 b( W
它与OpenID异曲同工。后者用网址标识用户,它用Email标识用户。用户键入Email地址以后,网站向Email服务器请求认证。# o8 [, J2 `$ v. X
虽然这种方案还处在推广期,效果有待观察。但是,我目前不太看好它。一则,它的技术要求和流程,比OpenID更复杂,无法用一句话讲清楚;二则,它要求服务器端支持,很难想象世界上大部分Email服务器都会部署Persona代码。
; A6 k! T+ d, f' G7 K. g四、OAuth
( B, N& K1 a7 W: XOAuth协议其实与第三方帐户是一回事。- Y% H# B; R' B# f
$ _+ O# a) H' s5 C6 H, R6 V: C" v" k9 ?0 S" B
第三方账户是第三方网站提供用户身份认证,属于认证服务(authentication);OAuth则是更进一步,第三方网站允许你直接操作它的用户数据,属于授权服务(authorization)。
7 M, A) o# y3 r2 s因为涉及到用户数据的改变,所以OAuth认证比Openid认证要求更严格。通常,只有针对某个第三方网站的外部服务,才需要用到OAuth;如果只是单纯地区分用户身份,其实没必要用它。
. N4 g& B3 C. d- F) I3 h五、Email一次性登录
1 ~ R) O, \, b上面四种登录方法,是目前主流的无密码登录。下面,我想介绍一种最简单的实现,它是美国程序员BenBrown在今年7月份提出来的。* c- z& k) ^ l5 y' d
他的做法很简单。用户登录的时候,只显示一个Email地址输入框。
?( Y2 e. n2 y4 c
' Q. [& R8 @5 {# @. g m8 C
1 d& P' [3 [* ^1 N& \用户输入Email地址以后,网站就向该地址发出一封邮件,里面包含了一个登录链接。用户点击这个链接,就证明他/她确实是这个邮箱的主人,身份有效,从而实现登录。
: i* B: m8 E d8 g# |4 Z) d( o1 E( V3 j0 @( R3 U4 m% l% f3 G
8 d5 L- ]. I- @
登录链接只在一段时间内有效,但是可以通过cookie,让用户长时间处在登录状态。如果cookie失效,则重新向用户邮箱发出另一个登录链接即可。+ c% X- I" \$ j% [
由于整个认证过程,都通过电子邮件完成,彻底实现无密码登录,而且操作流程很自然,易于理解。更重要的是,它使用现有的Email协议,不需要服务器端部署新的代码,具有最好的兼容性。: E, R' e* ]# C$ T2 F/ T
主要缺点是,它需要用户额外查看一次邮箱,稍显麻烦;它也不适合那种用户无法打开Email的场合,比如在朋友家中上网。因此,使用它的网站,还必须部署备用的登录方式。
0 B4 M6 m6 H' r! b& [7 C总的来说,我觉得这是一个简单易行的好方法,以后做网站的时候,打算尝试一下。
- G7 A8 G' x( `* B7 K1 K% f, e想听听大家的意见,你觉得这种方法可行吗?
& u. |, g: R% ^% o( g8 U$ t) D(完)' N; P$ c/ N7 p; v# e
作者:阮一峰
8 B1 {, L- ^" Y9 m/ j; G日期:2012年10月3日; _) a% B# a: i8 p" T! T# q0 D) f
来源:http://www.ruanyifeng.com/blog/2 T) w3 }, k+ ]. v! B9 }/ P4 E) g
|
|