用户登录以及身份认证有没有一个类似“行业标准”?或者说大家通常都会采用的办法?

2013-02-28 16:55:46 +08:00
 thenewbie
google 到的各种有关 Cookie,Session 的文章,以及各种 demo, 差别都好大。。。

那么,有没有大家都认可的,常用的,类似“行业标准”的做法呢?
2749 次点击
所在节点    问与答
9 条回复
AntiGameZ
2013-02-28 17:12:10 +08:00
SAML,Radius这种?
thenewbie
2013-02-28 17:19:25 +08:00
@AntiGameZ 呃,就是类似这个帖子讨论的这种 /t/61396 ,自己在做web小项目的时候,有一些啥公认的做法么?或许“行业标准”这么说有点太大了... 是我用词不太准确...就是有没有公认的一些 “最佳实践/best practice”?
AntiGameZ
2013-02-28 18:41:59 +08:00
@thenewbie 脱离场景谈最佳实践,难啊。

我的习惯:

数据库设置一张 Users 表,与认证有关系的字段为 { Id, 用户名,加密密码,密码盐,验证标识 }

默认验证标识为 null。用户登录时,输入明文密码,传输至 Server,加上密码盐,计算密码是否正确。正确的话生成一个验证标识(Guid)存入数据库,并将验证标识写入用户端Cookie,用户端Cookie的加密是一定要做的,各个框架都有自己的办法,不赘述。

当用户访问网站时,会检测用户送到服务端的Cookie,是否有正确的验证标识,如果有,则用户被当成已经认证的;没有或者不正确,则重定向用户到登录页。

这样也会有一个问题:用户在机器A上登录不退出,又在机器B上登录了,这时候因为验证标识变化了,机器A上的用户如果刷新页面,则会因为本机Cookie验证标识和服务器端不一致,要求重新登陆。这个这不符合场景要求,也可以通过维护多个验证标识的方式解决,也不赘述。

抛砖引玉,验证还比较好做,授权就忒复杂了。
thenewbie
2013-02-28 19:21:10 +08:00
@AntiGameZ 仅仅是“用户登录时,输入明文密码,传输至 Server,加上密码盐,计算密码是否正确。”怎么会 “A上登录不退出,又在机器B上登录了,验证标识变了” ?在生成标识的时候,还加进判断 ip 了么?

PS: 授权啥的... 通常都把信息放到session中么?
thedevil5032
2013-02-28 19:51:04 +08:00
@thenewbie 因为 A 和 B 得到的验证标识不是用一个, 所以不一样.
thedevil5032
2013-02-28 19:51:22 +08:00
@thenewbie 打错, 同一个.
thenewbie
2013-02-28 20:07:20 +08:00
@thedevil5032 @AntiGameZ 呃... 好吧,刚刚误解了... orz... 我刚刚怎么想的 >.<
AntiGameZ
2013-02-28 20:50:11 +08:00
@thenewbie cookie,session一般都是框架去维护的,真需要从头自己设计的情况不多。Discuz快是因为将很多数据都直接丢在磁盘上做了缓存。既然是小应用,确保程序逻辑清晰简单,不要有明显的漏洞(比如明文密码,或者某些页面/函数忘记添加验证条件)就差不多了。性能方面,毕竟对于同一个用户来说,登录操作不是频发的,只需要把用户在验证时候需要的一些必须数据在内存中做个缓存即可。即便不做,我认为也是可以接受的。
thenewbie
2013-02-28 21:05:37 +08:00
@AntiGameZ ^_^ 十分感谢~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/61575

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX