|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
大部分网站,都要求用户登录。: R( o# r1 I) }/ a9 O/ e
常见的做法,是让用户注册一个账户。
3 c# g& o. d: a+ K P# l# j* j8 Q6 ?4 d: O) v h% j
# [( `! h# J% w, x n
这种做法并不让人满意。- B% o# Y( }7 B* r2 y2 R" k
对于用户来说,每个网站必须记住一个密码,非常麻烦;对于开发者来说,必须承担保护密码的责任,一旦密码泄漏,对网站的业务和信誉都是巨大打击。# }" ` p3 }3 R. m) U0 d
所以,很早以前,人们就开始设想无密码登录(password-lesslogin)。这对用户和网站,都将是极大的减负。
3 I4 }2 I, W5 U2 y3 B本文先回顾无密码登录的几种常见做法,然后探讨一种最简单的实现。" n5 u) Z% K# a; j' f
一、OpenID* J( ^6 g; b( W4 r6 M
OpenID是最早提出的一种无密码登录。; T( }# c7 P1 J: F8 \2 i9 Z) a
; t9 u+ K3 c4 f" H; n
1 ^3 \. G9 q2 M& q; d7 l: l它的设想是这样的:互联网上每一个网址(URL),都指向一个独一无二的网页,这说明网址具有唯一性。因此,可以用网址来标识用户。: v7 Y w2 m/ D( a7 r
所以,使用OpenID的网站,不要求用户输入用户名,而要求用户输入一个代表其身份的网址。然后,向该网址进行求证,如果得到证实,就允许用户登录,从而实现无密码登录。' C8 K0 K( o8 k. \" w* \+ u: l
OpenID有两个很大的缺点:一是需要服务器端支持,二是使用网址表示身份,违背直觉,普通用户难以理解。因此,始终无法得到推广。
) U; K% T8 a( K- n/ t+ ^二、第三方账户
! ?& e' M! A! jOpenID的实质,是让第三方网站认证用户身份。那么很显然,这等同于用户在第三方网站登录。
7 _$ F5 e9 n; N4 S! m7 G7 J" E因此,可以直接告诉用户,使用第三方帐号登录(前提是对方支持OpenID)。
( u4 X1 b. e7 D; d. B! ?' R1 F G9 E& u7 v/ I
! |* f% d2 v* X9 ~7 ]
这样做的优点是比较直观,用户容易接受;缺点是自身的业务,从此多多少少要依赖第三方网站。比如,现在很多网站使用Facebook帐号登录,一旦Facebook出现故障,这些网站都会受到影响。
/ b9 I) j. i) P- a1 V, m三、Persona
* T W* i* H H9 M& _6 O# n* }去年,Mozilla提出了Persona方案,号称是无密码登录的终极解决方案。
* z2 ]% s: n3 G- ^, i, k" j6 _6 _
# J6 M5 b' N, `
% k; w( j' S6 l' d! P它与OpenID异曲同工。后者用网址标识用户,它用Email标识用户。用户键入Email地址以后,网站向Email服务器请求认证。
' ?( ~9 H8 r7 }6 ~% ]: u虽然这种方案还处在推广期,效果有待观察。但是,我目前不太看好它。一则,它的技术要求和流程,比OpenID更复杂,无法用一句话讲清楚;二则,它要求服务器端支持,很难想象世界上大部分Email服务器都会部署Persona代码。
4 u. ~9 O0 n) @ W6 s/ B- n四、OAuth6 c3 R) N3 f! }, h# w, X3 Z+ F& M4 N
OAuth协议其实与第三方帐户是一回事。
$ v$ j1 t1 g4 ?2 i) d* s
5 Q+ L; I. L, {/ y! E' X& J/ K7 ^7 H7 c( F$ n
第三方账户是第三方网站提供用户身份认证,属于认证服务(authentication);OAuth则是更进一步,第三方网站允许你直接操作它的用户数据,属于授权服务(authorization)。
2 Q" O9 C8 M6 T' ]6 U# c2 ~$ i因为涉及到用户数据的改变,所以OAuth认证比Openid认证要求更严格。通常,只有针对某个第三方网站的外部服务,才需要用到OAuth;如果只是单纯地区分用户身份,其实没必要用它。' D4 K3 j4 {2 H* f/ P9 ]) j/ w' s0 j
五、Email一次性登录3 r/ ~; p9 Q1 j' V% `3 p. s
上面四种登录方法,是目前主流的无密码登录。下面,我想介绍一种最简单的实现,它是美国程序员BenBrown在今年7月份提出来的。
( q( x! |8 P; U9 Z% x他的做法很简单。用户登录的时候,只显示一个Email地址输入框。( F- j) j- {2 k h
% D4 W! o& m3 e# ]5 g* I% B& \0 w& Q4 @. X* l; {
用户输入Email地址以后,网站就向该地址发出一封邮件,里面包含了一个登录链接。用户点击这个链接,就证明他/她确实是这个邮箱的主人,身份有效,从而实现登录。
7 |" g9 f/ f1 U+ F& [# E3 P
- G$ Q6 Z; x! t" A* Q/ }& M' l$ u
# i! i- }7 e% G登录链接只在一段时间内有效,但是可以通过cookie,让用户长时间处在登录状态。如果cookie失效,则重新向用户邮箱发出另一个登录链接即可。
+ y8 B) A) y! f9 ?! u由于整个认证过程,都通过电子邮件完成,彻底实现无密码登录,而且操作流程很自然,易于理解。更重要的是,它使用现有的Email协议,不需要服务器端部署新的代码,具有最好的兼容性。/ d- N1 U0 g# ?+ t, U- s. ^
主要缺点是,它需要用户额外查看一次邮箱,稍显麻烦;它也不适合那种用户无法打开Email的场合,比如在朋友家中上网。因此,使用它的网站,还必须部署备用的登录方式。. U8 m3 _: C q) M/ h3 r# E
总的来说,我觉得这是一个简单易行的好方法,以后做网站的时候,打算尝试一下。! `* s- E$ }5 R; c
想听听大家的意见,你觉得这种方法可行吗?
, _ p/ v* w- M# a. D$ N' O5 k0 _(完)' S* J0 V3 x7 Y+ U6 N) C6 x0 S V7 ^
作者:阮一峰8 S; E2 ?/ g% ^
日期:2012年10月3日6 `( v2 A( v. }7 \
来源:http://www.ruanyifeng.com/blog/& U" P' n" W% Q0 J+ |5 |: w
|
|