- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单 点登陆.NET的简单实现 (转)
系统的基本架构
我们假设一个系统System包含Service客户服务中心、Shop网上购物中心和Office网上办公中心三个独立的网站。 Service管理客户的资料,登录和注销过程。不论客户访问System的任何一个页面,系统都会转到登录界面,在用户登录后,系统会自动转会到客户上 次请求的页面。并且用户此后可以在System中无缝切换。不需要再次进行登录。即在System中实现单点登录SSO(Single Sign-On)。
我们知道,用户的即时状态通常是使用Application、Session、Cookie和存储的。而这些都 是不能在程序中跨站点访问的。我们必需通过站点间相互通讯来确认用户的即时状态。
?
简单的实现
?
第一步,假设用户访问了Shop或Office的任何一个页面Any。该页面所在的网站将会检查用户的即时状态。如果用户已经登录了,则将 Any页面的信息返回给用户。如果用户还没有登录,则自动转到Service的Validate页面,验证用户在Service状态。即Shop或 Office向Service发出请求,要求Service返回用户的即时状态。
第二步,Validate验证用户的即时状态,如果 用户已经登录了,则Service将用户的即时状态返回给Shop或Office的同步页面 Synchronous,通知Shop或Office同步用户状态。如果用户没有登录,则自动转向Customer页面,提示用户登录。
第三步,用户完成登录过程,当用户成功登录后,自动转回Validate页面,通知Shop或Office的Synchronous进行用户状态的同 步。
第四步,在用户状态同步完成后,在本地站点,用户状态成为在线状态,即可访问Any页面。
在上面的流程中。 我们知道,不管用户访问哪个站点,用户只需要一次登录,就保证用户在Service的即时状态都是在线的,不会再需要进行第二次登录的过程。
现在我们的思路已经清楚,具体的实现我们将在代码分析中完成。
?
代码分析 从上面的流程中我们可以看出,系统中Shop和Office的代码是完全类似的。只要Shop可以实现,Office也可以同样的克隆。所以我们的重点 分析的对象是Shop和Service的代码。
1、Shop的Web.config和Project.cs 在Shop的Web.config里,我们配置了Service站点和Shop站点,以方便我们在部署时方便修改。<appsettings><add?key=Service?value=http://localhost:8001?/><add?key=WebSite?value=http://localhost:8002?/></appsettings>?
在Project类里进行引用。
using?System;
using?System.Configuration;
namespace?Amethysture.SSO.Shop
{public?class?Project
{
public?static?string?Service?=?ConfigurationSettings.AppSettings[Service];public?static?string?WebSite?=?ConfigurationSettings.AppSettings[WebSite];
}
}
2、Shop的Global.cs Shop的Global.cs定义了四个Session变量,UserID用来标识用 户身份。Pass标识用户即时状态,Security用于保存往来Service和Shop的通讯不是被仿冒的。Url保存了上次请求的页面,以保证在用 户登录后能转到用户请求的页面。
protected?void?Session_Start(Object?sender,?EventArgs?e)
{
this.Session.Add(UserID,?0);
this.Session.Add(Pass,?false);
this.Session.Add(Security,?);
this.Session.Add(Url,?);
}
3、Shop的Any.cs Shop的Any.cs并没有包含代码,因为Any类从Page继承而来,为了代码分析方 便,我们将代码集中到Page.cs中。
using?System;
using?System.Web;
namespace?Amethysture.SSO.Shop
{
public?class?Any?:?Amet
文档评论(0)