日期:2009-05-07  浏览次数:21135 次

Active User Objects和The Membership Directory

在网站的编程技术中我们经常遇到的问题是如何跟踪用户的信息,特别
是当用户数量高达数百万的时候,可以很方便的管理用户并且还要求
服务器的高性能。下面介绍到将使用AUO(Active User Objects)技术来实现这个功能。

一些基本的概念简介:
首先一个基础是我们采用的解决方案是我们使用了微软提供的Microsoft Membership Directory,
它是跟随Site Server一起安装的。一旦安装了Site Server,你将拥有能够管理百万级用户量
和优化访问量极其频繁的情况了。
这个具体的技术细节可以参阅Site Server的文档,现在我们只是初步了解这个技术。
在MMD(Microsoft Membership Directory)下面的技术就是LDAP,LDAP是一个用来查询和
管理对象数据库的协议标准。该标准提供了一个用来存储和获取信息的目录。
而微软提供了访问这种目录结构的机制--ADSI (Active Directory Service Interfaces),ADSI
提供一个COM对象模型来管理目录中的项目,同时ADSI还能够访问其它的一些目录服务结构,例如
NT的安全数据库,Novell的DSN目录等等,这些我在前面的文章中也提到过好多次了。
这里再补充一点的是,使用ADSI还可以访问ADO来调用关系数据库中的数据。
现在简单的介绍一下AUO(Active User Objects,活动用户对象)。作为Site Server的另一部分,
它给我们提供了一个简单的通过ASP获取网站访问者和这些访问者信息的机制,这些信息都保存在一个或者
多个datastores(也被称作AUO providers)中。
注意的是主AUO provider通常为Membership Directory,而我们使用ADSI来访问的一般都被称为
次secondary AUO provider(并且用户的数据都是保存在这些数据库中).
你能够想象得到,保存多个用户的信息就意味着要有安全设置的功能。
现在这篇文章的兴趣主要在于如何约束和获取访问我们网站的方法上。

网站的安全问题
当一个用户匿名访问一个网页时,一般他们使用权限的就是一个匿名用户的权限,默认的是IUSR_systemname
并且他们所拥有的权限也仅仅是在NT中给用户帐号IUSR_systemname设置的权限。
一旦网站资源没有被给予匿名帐号访问的权限,那么该访问将被拒绝。
下面有几个方法来让一个对话不是运行在匿名帐号下,而是使用一个已经存在的用户帐号来建立对话。
例如,当IIS设置为使用Membership Directory, 将使用两种验证机制:
     Windows NT 验证 用户必须有一个NT帐号和密码
     Membership 验证 用户必须有一个Membership Directory帐号和密码
除了安全因素要考虑外,我们还必须考虑到其他一些因素,例如用户在拥有合法帐号前必须输入的其它一些个人信息。
我们就要考虑到这时用户在匿名帐号时就应该具备输入这些信息的权限。
要支持这个受限制的权限,我们可以很方便的使用Site Server的Membership Authentication
的cookie来实现。当然这时用户的浏览器必须要支持cookie了。