Step1帐户登录系统(0.整体思路)


我一直想做一个帐户登录系统,到今天,终于做出了一个雏形,非常高兴,因此,我会在下面的几篇文章对这个系统进行详细的介绍,这是第一篇,介绍一下整体思路,到后面,基本上就是以代码为主了,先看个截图:

  这个系统起源于单点登录系统(实际上它本身也是一个单点登录系统),这个技术现在在互联网上使用的十分广泛了,毕竟,无论是大的还是小的网站,是否有多个域名,都可太可能为每个栏目来设计一个单独的登录系统,等不可能让用户在每个栏目都去输入帐号密码,下面我粗略的图解一下单点登录系统(这篇文章之中提到的登录都应该兼容跨域名之间的接口的,如果在同一个域名内,将会容易得多)

  以上这个图只是一个登录流程的顺序图,按照这个图,我们一步一步看一下:

  1.用户要求进行某一操作;

  2.Web栏目通过自身的Cookie或Session判断用户是否已经登录,如果已经登录,则直接处理,否则,将用户导向到登录系统,并附带上参数通知登录系统在登录完成之后返回到哪一个页面;

  3.登录系统通过Cookie或Session判断用户是否已经登录,如果已经登录,则直接将用户跳转回栏目,并附带用户的帐户信息,如果没有登录,则提示用户登录;

  4.用户输入帐户密码;

  5.登录系统记录判断用户登录是否正常,然后先设置自己的Cookie或Session,再使用用户的帐户信息跳转到对应的栏目;

6.栏目收到跳转回来的请求之后,先验证请求,然后设置自己的Cookie,再根据用户的帐户信息向用户返回内容。

  本来这些文字描述都可以直接直观的画在图上的,不过我的发现机器上没有工具,连Word都没有,只好随便用画图画了一幅,不过因为大家对单点登录应该都很了解,因此,肯定会跳过不看,也就无所谓了。

  我并不是要做一个单点登录系统,我主要是想,现在的网站,无论大小,都有一个注册、登录什么的,对用户造成很大的困扰,用户不可能去记那么多帐号密码的,对网站来讲,维护用户的数据也是一个很难的问题,因此,如果网站能够相互公用用户信息,让用户的一个密码在多个网站都可以登录,这是一个皆大欢喜的事情。这个思路,实际上就是传说中的OpenId,我之所以没有去专门研究OpenId,是因为现在国内知道的人很少,而且OpenId还是有一定的局限性,我仔细的研究了各个大的网站提供的对外接口(国内的很少,基本都是国外的),决定写一个基于多种网站用户来源的单点登录系统,这就是刚才看到的Step1帐户登录系统.

  其实,总体原理非常简单(因为上面的那幅图画起来很费劲,这里就不想再画图了),只要想象上图之中的Passport服务器同时又是另外一个或多个其他Passport服务器的客户端,就会觉得一切都容易起来:这个Passport服务器先作为Google,Live,Yahoo等网站的帐户服务的客户端,将这个服务都整合在一起,然后作为一个统一的Passport提供给自身的一个或多个网站的栏目。

  例如,参照如下流程:

  1.用户打开http://www.dituren.cn/ ,并点击右上角的“登录”;

  2.页面会转向到http://account.step1.cn/account/login.aspx ,开始进行登录,也就是文章开头看到的那张图片
3.在页面上显示了多种帐户来源类型,用户选择自己有帐号的一种(以Google为例);

  4.帐户服务器会将用户转向到Google的登录页面(此接口由Google Accounts Authentication 提供);

  5.Google会首先让用户输入帐号密码,然后出现一个页面提示用户第三方网站正在请求帐户信息,请用户确认;

  6.用户确认后,则Google会返回到一个页面,这个页面URL是在第4步的时候随参数发送给Google的;

  7.在这个页面上接收Google传递的参数,写入到Cookie,然后将用户再次转向到最终栏目页面;

  8.栏目写入Cookie,整个登录过程完成。

  这个过程所起来比单点登录难不了多少,不过最大的问题在于这些网站提供的帐户服务互不相同,而且文档并不是很健全,目前研究这个服务的人又不多(国内更加少了),因此开发的时候不停的遇到很多很郁闷的问题(至今我都没有使用Google的OAuth成功登录,后来只好用AuthSub),因为不停的遇到一些小问题而且没有代码参考,心情十分郁闷,在最郁闷的时候,我决定将这所有的代码都整个公开提供下载,以减少还有别的同样对这个感兴趣的人研究的时候走的弯路。

  我会首先顺序次在博客上贴出每一个网站的帐户接口的详细使用和代码,等到这个服务完善之后,就将整个源码提供下载。

  预览地址是http://account.step1.cn/account/login.aspx ,目前就能登录,登录之后什么都不能做,呵呵!

  闭关说明:本来这个文章应该是叫“闭关纪要6”的,不过因为这次研究的东西会自成一个系列,而且本身会专业一点,不适合采用一个太不专业的名称,因此,没有采用,不过,编号还是被保留,因为我最终还是要记录闭关期间的研究成果的


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3