当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > Hi,现在我们暂时不谈Passport

ASP.NET
ASP.Net分页控件源码
Community Server专题一:概述Community Server
Community Server专题三:HttpModule
relaxlife.net发布一个自己开发的中文分词程序
RLCSS分词系统更新下载
asp.net获取SQL所有数据库名、所有表名、所有字段名
asp.net下获取Excel所有的工作表名称
Asp.Net常用函数
asp.net下用url重写URLReWriter实现任意二级域名的方法
在.NET中利用XMLHTTP下载文件的代码
在ASP.NET 中实现单点登录
c# .net 生成图片验证码的代码
asp.net中MD5 16位和32位加密函数
自己常用到的自定义公共类(已测试通过)
ASP.NET 2.0下随机读取Access记录的实现方法
.NET(C#)连接各类数据库代码-集锦
nunit使用指南之—NUnit Quick Start
ASP.NET中读取XML文件信息的4种方法与示例代码
asp.net中获取远程网页的内容之一(downmoon原创)
asp.net下获取远程网页的内容之二(downmoon原创)

ASP.NET 中的 Hi,现在我们暂时不谈Passport


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 172 ::
收藏到网摘: n/a

Hi, 现在我们暂时不谈Passport
小气的神2002.02.16 Article Type: In-Depth 难度等级:6/9 版本:1.27 在我写了那篇Passport你的网站之后,我发现自己犯了一个错误,从一开始。也许当时只是想表达自己对Passport的喜爱和接触之后还算美好的虚荣感受。我想在当时陶醉时,肯定刻意忽略了其它的某种因素。不然当计划正式开始使用它时,不会发现它突然带有了某种不确定性,甚至退后到测试的机器上也不能工作了;多次再去做和对着文档去想了又想,开始有些惭愧,因为我发现那篇文档几乎毫无用处,这将是一次名不其实表述,那么对于一个技术人员来说,这种感受是痛伤的,同时对他来说也将是个教训。 不过Passport的重要性丝毫不亚于它的复杂和繁琐,无法预知Microsoft将如何改善这种长距离的集中验证所带来的不确定“刺耳音符”,但在未来可以看到的体系和应用中,避而不见Passport,也意味着今后你在MS平台上要冒更多的风险。那么对于“是否需要接触Passport?”、“现在是否需要学习了解Passport?”这样问题的答案都应该是慎重的“应该”,放弃观望的态度将是一个好的开始。我们可以在接触学习中等待3.0版本的Passport,不过在没有更好的Demo,没有我们需要的Help文档的一段时间里,现在我们暂时不谈MS的Passport。它依然复杂得超出我们的理解,我们只能一点点去尝试和了解,做那些我们力所能及的事。最后欢迎回到这个脆弱而迷幻的世界,它依然充满失落和期待。 下面将是一个Passport的实现(我猜是最小的一个框架),它的最初是Nathan Smith ([email protected] )示范性的一个dotNET β2的版本,调试时我进行了一些小的改动(不少改进吧,但主框架没动),并且添加了一个简单的测试前端。在我升级到dotNET 1.0后,重新测试了它,所以它需要的环境可能是:Windows 2000 Server, MS SQL 2000 SP2 (中文或英文),dotNET SDK 1.0 , VS.NET RTM,IIS 5.0 SP, IE6 2813 数据结构: 设计两个数据库:PassportSvr , PassportClient PassportSvr: PassportClient: 另外还有下面这些实现核心功能的存储过程: sp_registerUser sp_setUserInfo sp_setUserPassword sp_setUserStatus sp_purgeUser sp_setUserHomeService sp_validateUser sp_registerService sp_setServiceInfo sp_setServicePassword sp_setServiceStatus sp_purgeService sp_validateService 应用实现: 根据上面的数据结构实现了两个Web Services,一个作为整体的Services的管理接口,一个是提供给最终用户使用的Client Services接口。看得出来最终提供给用户使用的只有7个函数,当然开始时你可以在调试Services WebServices时测试一下RegisterService函数,它将建立一个Services,记下services_name和 services_password ,在实现Client的WebService的Global.cs中有这样应用: protected void Application_Start(Object sender, EventArgs e){ DataManager.InitManager(); Passport ppSvc = new Passport(); AppTicket = ppSvc.AuthenticateService("Passport","passport"); ppSvc=null;} 整个实现中有个与Passport相似的安全机制-Ticket,当用户通过验证之后获得一个AuthenticationTicket并产生一个Token,我认为这里是最有趣和最棒的部分,简单有效。 Ticket Structure public class AuthenticationTicket{ public AuthenticationTicket() { } public int Token; public int OwnerID; public double ExpirationDate; public double IssueDate; public string NickName; public string FirstName; public string LastName; } Token Generation Routine static private int GenerateToken(int systemID, string nickName, int passwordHash, double issueDate, double expirationDate){ int rtn; // our return value string s_token; // string concatenation of the objects // concatenate all of our values together. // note the use of hashing the password and the id, this // *should* help reduce the probability of attack s_token=systemID.GetHashCode().ToString() + nickName + passwordHash.GetHashCode().ToString() + issueDate.ToString() + expirationDate.ToString(); // get the hash of the concatenation and return it rtn=s_token.GetHashCode(); return rtn;} 好了解决了主要问题,后面的实现的就迎刃而解了,下面分别是两个Web Services暴露的功能函数。 public AuthenticationTicket AuthenticateServicepublic AuthenticationTicket AuthenticateUserpublic AuthenticationTicket CreateAccountpublic int Dis