|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
大部分网站,都要求用户登录。
/ `& |6 R* I$ z/ a- C' o# f常见的做法,是让用户注册一个账户。
! v; p! ]) @+ u. V, U- Q
! S! @7 O7 U; u
9 R, m# @0 ?( z( B0 y这种做法并不让人满意。. [* |# L) }3 M w) Y5 J8 g3 i6 B
对于用户来说,每个网站必须记住一个密码,非常麻烦;对于开发者来说,必须承担保护密码的责任,一旦密码泄漏,对网站的业务和信誉都是巨大打击。5 r8 T' D: f N) z ~5 s) b
所以,很早以前,人们就开始设想无密码登录(password-lesslogin)。这对用户和网站,都将是极大的减负。
# E& e( K2 {: j& f( [8 x8 M$ ]本文先回顾无密码登录的几种常见做法,然后探讨一种最简单的实现。
) K; l4 p) j) L z7 P. U一、OpenID" b6 L Y; q$ A$ w1 M) J
OpenID是最早提出的一种无密码登录。1 \3 }% k9 D4 Q- B8 G( z
+ _; ~$ w/ G! f1 o
, t& A3 e2 C* s2 u* x它的设想是这样的:互联网上每一个网址(URL),都指向一个独一无二的网页,这说明网址具有唯一性。因此,可以用网址来标识用户。" N1 l, c; O6 J$ M: j: L
所以,使用OpenID的网站,不要求用户输入用户名,而要求用户输入一个代表其身份的网址。然后,向该网址进行求证,如果得到证实,就允许用户登录,从而实现无密码登录。+ c7 w+ a Y# s0 d
OpenID有两个很大的缺点:一是需要服务器端支持,二是使用网址表示身份,违背直觉,普通用户难以理解。因此,始终无法得到推广。
3 \# q U& {% r二、第三方账户! u- m7 _' Z" ?/ n
OpenID的实质,是让第三方网站认证用户身份。那么很显然,这等同于用户在第三方网站登录。( k. @9 M5 g9 t, |
因此,可以直接告诉用户,使用第三方帐号登录(前提是对方支持OpenID)。1 r k2 x5 f+ @3 }4 D, `" @8 p
8 q8 u3 q6 T" `8 c2 y8 L; Y9 b3 C# P6 h1 D8 D1 _6 ^7 ]5 z5 b
这样做的优点是比较直观,用户容易接受;缺点是自身的业务,从此多多少少要依赖第三方网站。比如,现在很多网站使用Facebook帐号登录,一旦Facebook出现故障,这些网站都会受到影响。! Q7 l/ [8 f3 T! x+ B9 E, j' p& A
三、Persona
$ v. Z. }6 q( @6 p) O' @去年,Mozilla提出了Persona方案,号称是无密码登录的终极解决方案。+ {- p9 m6 s2 h
4 S" i! E9 N: v" W# {. B
2 z) R7 K" x) u4 p它与OpenID异曲同工。后者用网址标识用户,它用Email标识用户。用户键入Email地址以后,网站向Email服务器请求认证。- V, W: z5 }, ?; [8 g
虽然这种方案还处在推广期,效果有待观察。但是,我目前不太看好它。一则,它的技术要求和流程,比OpenID更复杂,无法用一句话讲清楚;二则,它要求服务器端支持,很难想象世界上大部分Email服务器都会部署Persona代码。
. r/ I( z- L+ @ C2 a, r) }! w; i x四、OAuth
0 O+ L- }$ r& ~OAuth协议其实与第三方帐户是一回事。
' \" P! _, S( z, P* z0 g7 b: M# j) @8 d' ~$ W& M
* }2 r+ {" d |& v m第三方账户是第三方网站提供用户身份认证,属于认证服务(authentication);OAuth则是更进一步,第三方网站允许你直接操作它的用户数据,属于授权服务(authorization)。: W7 O: q: q5 m1 K& g+ C
因为涉及到用户数据的改变,所以OAuth认证比Openid认证要求更严格。通常,只有针对某个第三方网站的外部服务,才需要用到OAuth;如果只是单纯地区分用户身份,其实没必要用它。
% x5 ]; T" B3 P* P: }- S五、Email一次性登录
9 o# z a4 a' m9 x- k0 a5 D& M上面四种登录方法,是目前主流的无密码登录。下面,我想介绍一种最简单的实现,它是美国程序员BenBrown在今年7月份提出来的。' e4 Z% p6 o" Y- Z0 B1 U7 N# \; e/ T
他的做法很简单。用户登录的时候,只显示一个Email地址输入框。
c1 [) i. L4 t+ O9 X# w& @; d: M7 b
8 K* T, _: ?$ I) l2 \用户输入Email地址以后,网站就向该地址发出一封邮件,里面包含了一个登录链接。用户点击这个链接,就证明他/她确实是这个邮箱的主人,身份有效,从而实现登录。: e/ [: \0 y( K0 q1 x
7 m1 { C' _% g+ Y- t: @
. l9 d) z; Q2 B4 b+ a: I5 u0 a登录链接只在一段时间内有效,但是可以通过cookie,让用户长时间处在登录状态。如果cookie失效,则重新向用户邮箱发出另一个登录链接即可。
8 t5 V8 K8 M% H4 ^$ q' p由于整个认证过程,都通过电子邮件完成,彻底实现无密码登录,而且操作流程很自然,易于理解。更重要的是,它使用现有的Email协议,不需要服务器端部署新的代码,具有最好的兼容性。
& Q* I% W9 L* ?! M z& I, |主要缺点是,它需要用户额外查看一次邮箱,稍显麻烦;它也不适合那种用户无法打开Email的场合,比如在朋友家中上网。因此,使用它的网站,还必须部署备用的登录方式。
. w. s% c- |8 B; V& O0 N总的来说,我觉得这是一个简单易行的好方法,以后做网站的时候,打算尝试一下。" I* F+ m& d5 C9 {
想听听大家的意见,你觉得这种方法可行吗?% k+ W* W0 o4 V: c
(完)
( g2 j' a f+ O z T$ ?. {作者:阮一峰& y0 E, U W, z* W, R
日期:2012年10月3日; l3 l/ z5 X7 E$ p, j
来源:http://www.ruanyifeng.com/blog/, O& M1 L4 r- i' W" ]3 u5 K/ V
|
|