IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

也说web服务的用户注册部分

美人她爹 2010-02-28 18:51:25 累计浏览 3,956 次
本机暂存

    Robert写了《思考:未来的web服务是否还需要用户注册的部分?》,提出中小型web服务可以不单独建立注册模块,一个可能的方法,是使用google或者facebook的账户服务。真的是有趣的问题大家都会考虑,我当年也写过《接着说facebook:facebook能成为网络身份证吗?》,当时马上要去深圳出差,没有继续写下去。文章的最后两段,其实说明了我对这种类似Microsoft Passport的第三方认证的考虑。

    先说一下我对问题的理解吧:基本上,网络服务和用户之间,还是在沿用当年UNIX终端验证用户的方法:用户名+密码。非常简洁有效的方法,明码的用户名解决了名字空间里面冲突的问题,密码用来验证用户的身份。这是一个双向的契约模型:用户名用来唯一确定用户,密码作为主机和人之间的身份契约。

    随着网络服务的增加,用户需要维护的契约越来越多,不仅在用户名的名字空间冲突逐渐增加,用户不得不选取各种用户名来代表自己,密码也成为更大的负担。为了减轻用户负担,微软提出了第三方认证的passport方法。基本上就是把各种锁的各个钥匙,变成微软一家的万能钥匙,只要开了微软这把锁,后面的锁都开了。

    我在《接着说facebook:facebook能成为网络身份证吗?》一文的最后,给出了攻击这种万能钥匙的方法。就是假扮成passport的合作伙伴,在自家门面上,挂上和其他真正合作伙伴一样的锁,盗取用户的万能钥匙。这个办法不是我发明的,很早就有人用这个办法,骗取人们去看谁在MSN上面block了他们,然后盗取MSN密码。类似的,meebo这种让人们输入各种聊天工具密码的网站,也很容易被人伪造而盗取密码。

    总结下来,这种万能钥匙失效的原因,是把原来的双方(主机和用户)契约,变为了三方(主机,用户,万能钥匙提供商)契约。三方契约本身并没有错,错在契约失效的时候,如何控制损失。在双方契约(用户名+密码)模型里面,用户和某个网站之间如果契约失效(如密码被盗),用户的损失局限于所有和这个网站相关的资料;而在万能钥匙的三方契约里面,一旦密码被盗,损失的是用户的万能钥匙,后面所有依赖这把钥匙的锁,全都可以被攻破。

    尽管万能钥匙的方法不可靠,但是还是会有提供商去推广,因为掌握了用户的行为,就意味着商业机会。不过这种和用户利益背道而驰的方法,我不看好。契约过多的问题还是存在的,也会有新的方法最终解决这个问题。

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 微信扫码登录网页实现原理 (累计阅读 17,466)
  2. 初探单点登录 SSO (累计阅读 10,618)
  3. 别得瑟了,你很可悲! (累计阅读 7,916)
  4. 如何设计用户登录 (累计阅读 6,643)
  5. 你会做Web上的用户登录功能吗? (累计阅读 6,376)
  6. 什么是OpenID?OpenID概念、原理和案例 (累计阅读 5,491)
  7. 基于PECL OAuth打造微博应用 (累计阅读 5,212)
  8. 一个简单的基于PhoneGap的开源微博客户端 (累计阅读 5,161)
  9. 互联网上的单点登录研究 (累计阅读 5,117)
  10. 深入理解OAuth与豆瓣OAuth test (累计阅读 5,083)