|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
大部分网站,都要求用户登录。3 E; L; b. T# s* R
常见的做法,是让用户注册一个账户。& N$ F7 O* _+ U. Q. R, y- k$ T
( ~$ L5 M9 j( m; u3 H( B) x* s) [; F' b* ~. X: b2 }1 L5 ]/ h
这种做法并不让人满意。
5 v/ S# r- Y0 r |! V对于用户来说,每个网站必须记住一个密码,非常麻烦;对于开发者来说,必须承担保护密码的责任,一旦密码泄漏,对网站的业务和信誉都是巨大打击。
) y ^$ ]( q& z: s; J所以,很早以前,人们就开始设想无密码登录(password-lesslogin)。这对用户和网站,都将是极大的减负。
' M$ G9 s( b! h7 o本文先回顾无密码登录的几种常见做法,然后探讨一种最简单的实现。0 `/ T+ O- A# X6 ^5 m% _
一、OpenID$ }+ p( ~. }- e E% c
OpenID是最早提出的一种无密码登录。3 A: Z4 s$ Y- I9 }# ?; [* n
5 }+ E# q/ u$ M, N) c" B0 ?0 s% G* `. C# A
它的设想是这样的:互联网上每一个网址(URL),都指向一个独一无二的网页,这说明网址具有唯一性。因此,可以用网址来标识用户。3 k6 m3 T2 ~/ H# V- z2 _' ]
所以,使用OpenID的网站,不要求用户输入用户名,而要求用户输入一个代表其身份的网址。然后,向该网址进行求证,如果得到证实,就允许用户登录,从而实现无密码登录。( @ ~3 e* z0 r, d) b+ V
OpenID有两个很大的缺点:一是需要服务器端支持,二是使用网址表示身份,违背直觉,普通用户难以理解。因此,始终无法得到推广。$ Z! a' N) i% M5 E" ^ m1 m+ M5 K
二、第三方账户 \/ U( H5 {! O5 t5 I
OpenID的实质,是让第三方网站认证用户身份。那么很显然,这等同于用户在第三方网站登录。
3 ]7 ]" L3 p) G! X7 U: u; O! R因此,可以直接告诉用户,使用第三方帐号登录(前提是对方支持OpenID)。
0 }9 T; }3 G; O7 v" i7 c: I, o% X2 n/ \4 |9 u7 ?6 h3 G6 v) s
& d0 b2 P- h i& I |4 f4 F
这样做的优点是比较直观,用户容易接受;缺点是自身的业务,从此多多少少要依赖第三方网站。比如,现在很多网站使用Facebook帐号登录,一旦Facebook出现故障,这些网站都会受到影响。
$ ^! [& T5 k/ F2 z& g$ i, P" }7 t4 h三、Persona$ |& \+ ^4 B1 ^
去年,Mozilla提出了Persona方案,号称是无密码登录的终极解决方案。
0 E; h: P) d' X
6 m3 W8 _- q. W9 j( h
/ }/ Y2 ~5 m5 k% ^) P+ f+ [* `" z它与OpenID异曲同工。后者用网址标识用户,它用Email标识用户。用户键入Email地址以后,网站向Email服务器请求认证。
; w6 ?0 D* b! J! u! p虽然这种方案还处在推广期,效果有待观察。但是,我目前不太看好它。一则,它的技术要求和流程,比OpenID更复杂,无法用一句话讲清楚;二则,它要求服务器端支持,很难想象世界上大部分Email服务器都会部署Persona代码。% }& k8 ]1 t1 H9 C8 {9 _
四、OAuth4 P3 J: f( Z! { i
OAuth协议其实与第三方帐户是一回事。
7 |3 Q# g& k& u9 a4 j' z! u( U" T* _2 r6 `( y& d
/ I- }2 E6 p6 E! @5 q* N( o: S
第三方账户是第三方网站提供用户身份认证,属于认证服务(authentication);OAuth则是更进一步,第三方网站允许你直接操作它的用户数据,属于授权服务(authorization)。# B% Z4 s7 L4 X) E3 M
因为涉及到用户数据的改变,所以OAuth认证比Openid认证要求更严格。通常,只有针对某个第三方网站的外部服务,才需要用到OAuth;如果只是单纯地区分用户身份,其实没必要用它。
! R' y: X4 |7 X$ Y, X, @1 g( W五、Email一次性登录
1 N" P1 E7 |, { {上面四种登录方法,是目前主流的无密码登录。下面,我想介绍一种最简单的实现,它是美国程序员BenBrown在今年7月份提出来的。4 P q x! _! j( E
他的做法很简单。用户登录的时候,只显示一个Email地址输入框。
+ ], O7 |. c9 v$ J
# _4 |' i0 f) N; c: i0 M) l/ z9 X" \5 Z" U( l+ O4 |5 q8 E# k0 l
用户输入Email地址以后,网站就向该地址发出一封邮件,里面包含了一个登录链接。用户点击这个链接,就证明他/她确实是这个邮箱的主人,身份有效,从而实现登录。
0 V; D$ D" A# [" J. m8 }% [
" z# G$ [# q5 G/ ?4 ~
! N* O9 C7 F; L登录链接只在一段时间内有效,但是可以通过cookie,让用户长时间处在登录状态。如果cookie失效,则重新向用户邮箱发出另一个登录链接即可。
& B) g U4 [9 ^5 c由于整个认证过程,都通过电子邮件完成,彻底实现无密码登录,而且操作流程很自然,易于理解。更重要的是,它使用现有的Email协议,不需要服务器端部署新的代码,具有最好的兼容性。
- `8 M% r% ?" V$ f主要缺点是,它需要用户额外查看一次邮箱,稍显麻烦;它也不适合那种用户无法打开Email的场合,比如在朋友家中上网。因此,使用它的网站,还必须部署备用的登录方式。7 `; ~& w+ V* }5 K
总的来说,我觉得这是一个简单易行的好方法,以后做网站的时候,打算尝试一下。
P+ L: {+ c2 T9 y想听听大家的意见,你觉得这种方法可行吗? Y1 J& d) I" I
(完)0 P( W' L8 s0 E* K$ ^2 A
作者:阮一峰& I, t c* a! M/ O' P4 H
日期:2012年10月3日/ V) M3 t* c0 X5 f; k
来源:http://www.ruanyifeng.com/blog/$ ]' ^& U6 h) c9 @
|
|