上次粗略的讲解了Step1帐户登录系统的思路之后,这一次我将介绍一下我的程序实现的结构,从这篇文章之后,就将细化到每一个接口,例如Google,Yahoo,Live等,对这些接口的使用进行详细的介绍。
先看看文件结构,说起来很简单因为一共只有以下三个文件:
1.Login.aspx,最重要的页面,在用户登录时让用户选择采用哪种帐号登录,用户选择对应的帐号之后,将用户转向到对应的网址;
2.Logout.aspx,将用户注销,并转向到原来的URL;
3.Handler.aspx,接收帐户服务器(例如Google的服务器)回发的登陆请求,根据回传的资料请求用户的信息,设置到Cookie并将用户转向到原先请求的网址;
再看看配置,为便于扩展和开发,我采用了在Web.config文件之中建立XML格式的配置的方法,我的网站目前的配置如下(其中的***是本站的私有Key,因此被我屏蔽了):
Web.Config配置
1 <AccountServerConfiguration cookieName="Step1ATS" cookieDomain="step1.cn" paramName="Step1AC" rootUrl="http://account.step1.cn/account/">
2 <AccountServers>
3 <AccountServer name="google.com" type="Step1.AccountServer.AccountServers.AuthSubServer,Step1.AccountServer" urlAuthSubRequest="https://www.google.com/accounts/AuthSubRequest?" urlScope="http://www.google.com/m8/feeds/" urlData="http://www.google.com/m8/feeds/contacts/default/thin?max-results=0"/>
4 <AccountServer name="yahoo.com" type="Step1.AccountServer.AccountServers.BBAuthServer,Step1.AccountServer" appid="CQLE4v*****************N.WXQbRg--" secret="a6e8**********52d1654f0" timeout="300" server="https://api.login.yahoo.com" pathLogin="/WSLogin/V1/wslogin?" pathPwtoken_login="/WSLogin/V1/wspwtoken_login?"/>
5 <AccountServer name="live.com" type="Step1.AccountServer.AccountServers.LiveServer,Step1.AccountServer" appid="000000004000****" secret="account.step1.cn" securityalgorithm="wsignin1.0"/>
6 <AccountServer name="xiaonei.com" type="Step1.AccountServer.AccountServers.OpenSocialServer,Step1.AccountServer" loginUrl="http://apps.xiaonei.com/passport/login.html"/>
7 </AccountServers>
8 </AccountServerConfiguration>
9
简单的介绍一下配置项的内容,根节点AccountServerConfiguration表明这是一个帐户登录系统配置的内容,而它的几个属性是登录系统的全局配置,cookieName代表写入到Cookie的键名称,cookieDomain是写入Cookie的域,paramName是向客户Web栏目回传登录信息的参数名称,rootUrl是整个程序的部署URL。
AccountServers节点下的每一个AccountServer代表一个种登录类型服务器,属性name是该类型的唯一标示,属性type是该类型对应的实现类的名称,其他所有的属性都是对该类型的配置参数,例如对于Yahoo 的BBAuth,就必须配置在Yahoo登记的appid等。
了解文件结构和配置结构之后,再对照一下类的设计结构:
上图之中的LoginPage.cs,LogoutPage.cs,HandlePage.cs分别代表上面提到的3个页面,Configuration.cs是用来读取上图提到的XML配置的类,AccountHelper.cs包含一些静态方法,例如读写用户Cookie等,其中最重要的是BaseServer,以及AccountServers目录下的那些类。
AccountServers都继承BaseServer,每一个类都代表一种登陆类型,例如OAuth,OpenID,Google的AuthSub等(其中的有些我还没有完全实现),因此添加新的类型支持,只需要在AccountServers文件夹之中添加一个对BaseServer的继承即可。
Tools文件夹包含一些附加的工具类,例如对WebService的访问等等。
因为我设计的时候,并没有从开始就考虑使用一个非常结构化的模式来设计,因此这个结构设计也显得比较简单,不过我个人比较喜欢这种简单明了的设计。本来计划这篇文章会包含代码的,可是发现现在已经很长了,只好在下一篇再贴上上面的一些重要代码
本文作者:未知