|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
大部分网站,都要求用户登录。8 A: i- d7 {1 h( x$ D7 {# {
常见的做法,是让用户注册一个账户。
& E* X: q) d, E4 m* @8 w5 z6 b2 L* G5 d F! {. F
' R1 `) `. _/ k& T6 p这种做法并不让人满意。" f( Z! X; w. y" M: Y! Q; U
对于用户来说,每个网站必须记住一个密码,非常麻烦;对于开发者来说,必须承担保护密码的责任,一旦密码泄漏,对网站的业务和信誉都是巨大打击。 n. G% Z9 t$ H% E" y) a
所以,很早以前,人们就开始设想无密码登录(password-lesslogin)。这对用户和网站,都将是极大的减负。
. K: Y4 t8 G6 j) l% [3 }本文先回顾无密码登录的几种常见做法,然后探讨一种最简单的实现。5 E. i! j L" J0 t+ _5 V/ t% ~
一、OpenID' J4 E' f5 U0 N4 l) {* E, Z, `
OpenID是最早提出的一种无密码登录。
, A1 j9 A& B9 _. ]4 I% g; Y2 s5 S4 L7 {9 n" T) Z1 P
o! Q# ^7 S* `* Y! w+ a8 \4 s它的设想是这样的:互联网上每一个网址(URL),都指向一个独一无二的网页,这说明网址具有唯一性。因此,可以用网址来标识用户。
, i, w# z. T L( a% t所以,使用OpenID的网站,不要求用户输入用户名,而要求用户输入一个代表其身份的网址。然后,向该网址进行求证,如果得到证实,就允许用户登录,从而实现无密码登录。8 T/ q8 R1 M( `5 v, }) {" b) v/ b
OpenID有两个很大的缺点:一是需要服务器端支持,二是使用网址表示身份,违背直觉,普通用户难以理解。因此,始终无法得到推广。
5 k: v' b+ J8 M$ W+ l; M二、第三方账户
; R7 Q+ ?- z6 V* d5 K# E2 B1 AOpenID的实质,是让第三方网站认证用户身份。那么很显然,这等同于用户在第三方网站登录。6 p1 ^7 i" y, }. }# A
因此,可以直接告诉用户,使用第三方帐号登录(前提是对方支持OpenID)。0 N% v2 F5 @$ D+ }
: k" x" I P* {1 j9 f3 x# N I0 ]
- P" q& V2 t8 ]- O V这样做的优点是比较直观,用户容易接受;缺点是自身的业务,从此多多少少要依赖第三方网站。比如,现在很多网站使用Facebook帐号登录,一旦Facebook出现故障,这些网站都会受到影响。
% O" k# a% z4 j |- h+ ~( I三、Persona! {- F3 R3 u5 T7 a* O
去年,Mozilla提出了Persona方案,号称是无密码登录的终极解决方案。
- i3 f& f) w% O2 p3 }5 V8 G- j5 O5 O% k! B& w% \5 s1 U* r
& n& U( {4 J7 Y9 R5 {
它与OpenID异曲同工。后者用网址标识用户,它用Email标识用户。用户键入Email地址以后,网站向Email服务器请求认证。9 p6 `4 Q) A* O; Y. A
虽然这种方案还处在推广期,效果有待观察。但是,我目前不太看好它。一则,它的技术要求和流程,比OpenID更复杂,无法用一句话讲清楚;二则,它要求服务器端支持,很难想象世界上大部分Email服务器都会部署Persona代码。3 V' V8 K, M l" k* ]8 [2 ~
四、OAuth
0 ^+ v$ V% w! JOAuth协议其实与第三方帐户是一回事。" m; ^: e: F/ I
) b/ ^- Z. n5 `3 k" d2 Z% \8 \5 ?
+ I+ k9 G' e% }) x: O2 `
第三方账户是第三方网站提供用户身份认证,属于认证服务(authentication);OAuth则是更进一步,第三方网站允许你直接操作它的用户数据,属于授权服务(authorization)。
7 ~. W7 _) x. p. d O. ]6 @2 ^, p因为涉及到用户数据的改变,所以OAuth认证比Openid认证要求更严格。通常,只有针对某个第三方网站的外部服务,才需要用到OAuth;如果只是单纯地区分用户身份,其实没必要用它。 m$ L0 ~3 `# b$ `4 A7 S* T+ u' N1 G
五、Email一次性登录) O% M: R% m: b8 |* h e" C3 H
上面四种登录方法,是目前主流的无密码登录。下面,我想介绍一种最简单的实现,它是美国程序员BenBrown在今年7月份提出来的。* ^ W; G. N& S( y3 l9 K9 V
他的做法很简单。用户登录的时候,只显示一个Email地址输入框。
% k8 Q/ A$ y6 ?7 H
9 D- K U5 N. E8 d
- L2 N7 a8 I$ B) W; [! u用户输入Email地址以后,网站就向该地址发出一封邮件,里面包含了一个登录链接。用户点击这个链接,就证明他/她确实是这个邮箱的主人,身份有效,从而实现登录。8 ?1 _6 e& d5 h# |
" l4 k+ R% A5 M$ W
9 Y2 D" I# Q }' S" c登录链接只在一段时间内有效,但是可以通过cookie,让用户长时间处在登录状态。如果cookie失效,则重新向用户邮箱发出另一个登录链接即可。
: E* h+ r# C* @由于整个认证过程,都通过电子邮件完成,彻底实现无密码登录,而且操作流程很自然,易于理解。更重要的是,它使用现有的Email协议,不需要服务器端部署新的代码,具有最好的兼容性。* H( @7 K' W7 a9 i. H* x; k
主要缺点是,它需要用户额外查看一次邮箱,稍显麻烦;它也不适合那种用户无法打开Email的场合,比如在朋友家中上网。因此,使用它的网站,还必须部署备用的登录方式。
* z9 X& ]1 G: ~总的来说,我觉得这是一个简单易行的好方法,以后做网站的时候,打算尝试一下。/ ?: I f( ?# X: w {
想听听大家的意见,你觉得这种方法可行吗?
/ N' Q; L' G* a: }(完)* B% M" K# u7 E
作者:阮一峰1 u! A- T$ T3 e8 T! J1 L4 K
日期:2012年10月3日
0 ]$ N, H' @% j8 V+ r来源:http://www.ruanyifeng.com/blog/
( v# b) c# x5 g |
|