MOSS for Developers - 第 10 部分:用户管理
从开发人员的角度概述用户管理。此内容是 www.myrampup.com MOSS 内容的第 10 部分。
引言
在 Windows SharePoint Services 3.0 中,对网站、列表、文件夹和列表项的访问通过基于角色的成员系统进行控制,其中用户被分配到授权其访问 Windows SharePoint Services 对象的角色。
要授予用户访问对象的权限,您可以将用户添加到已对该对象拥有权限的组中,或者创建角色分配对象,为该角色分配设置用户,可选地将该角色分配绑定到具有基本权限的相应角色定义,然后将该分配添加到列表项、文件夹、列表或网站的角色分配集合中。如果您在将用户分配给角色时未将角色分配绑定到角色定义,则用户将没有任何权限。
Windows SharePoint Services 提供了以下控制其对象访问的方式
- 对象可以使用与父网站、列表或文件夹相同的权限,继承父对象上可用的角色和用户,或者它们可以使用唯一的权限。
- 网站、列表、文件夹和项目都提供角色分配集合,允许对用户访问对象进行精细管理。
- 在 Windows SharePoint Services 3.0 中,只有一种组,以前称为跨站点组。组由用户组成,可能分配或不分配到角色。Windows SharePoint Services 默认包含以下三个组
- 所有者(管理员)
- 成员(贡献者)
- 访客(读者)
当您通过用户界面创建具有独特权限的网站时,您会被定向到一个页面,您可以在其中将用户分配到这些组,作为网站预配的一部分。
- 匿名访问允许用户匿名贡献列表和调查,或匿名查看页面。您还可以授予“所有经过身份验证的用户”访问权限,以允许您的域中的所有成员访问网站,而无需启用匿名访问。
- 网站创建权限(CreateSSCSite 和 ManageSubwebs)控制用户是否可以创建顶级网站、子网站或工作区。
用户通过具有角色分配的组间接成为 SharePoint 对象的成员,或通过角色分配直接成为 SharePoint 对象的成员。此外,用户可以是添加到组或角色的 Microsoft Windows NT 域组的成员。角色定义将用户或组与对应于 Microsoft.SharePoint.SPBasePermissions
枚举值的一个或一组权限关联起来。每个用户或组都有一个唯一的成员 ID。
您可以以不同于通过文件 addrole.aspx 和 editrole.aspx 的功能的方式使用对象模型创建或修改角色分配和定义。与 UI 中呈现的这些页面不同,对象模型不强制执行权限依赖性,因此您可以创建具有任意权限组合的角色定义。但是,在使用对象模型自定义角色定义和权限时,请仔细规划,因为构思不佳的角色定义和不当分配的权限可能会导致不愉快的用户体验。
有关 Windows SharePoint Services 权限的更多信息,请参阅 SPBasePermissions。
您需要安装 Windows SharePoint Services 3.0 SDK
安全策略
安全策略提供了一种在 Web 应用程序(虚拟服务器)的所有网站集中强制执行统一安全的方法。通过策略,您可以将角色或权限集合分配给单个 Windows SharePoint Services 用户,以及使用 Windows 身份验证或可插拔身份验证系统的域组,但不能分配给 SharePoint 组。每个策略条目指定 Web 应用程序中用户或组的权限。
策略在逻辑 Web 应用程序或区域级别设置。例如,用户在 http://Server 和 http://Server.extranet.microsoft.com 上可以有不同的策略,即使这两个 Web 应用程序具有相同的内容。
可以通过策略授予或拒绝权限。授予权限会赋予用户或组在 Web 应用程序中所有受保护对象上的该权限,无论对象上的本地权限如何。拒绝权限会覆盖授予权限,主动阻止用户或组在 Web 应用程序中所有受保护对象上的该权限。拒绝用户的所有权限会阻止该用户访问任何内容,即使该用户对特定内容具有显式权限:策略会覆盖网站级权限。
在策略角色中,用户和组通过其安全标识符 (SID) 和其登录名或用户名进行识别。应用策略角色类似于管理网站、列表、文件夹或文档的权限:您添加用户或组并将它们分配给一个或多个角色定义。但是,与 Windows SharePoint Services 对象上的权限不同,策略角色不与其他 Web 应用程序或用于管理对象权限的内容角色定义共享。每个 Web 应用程序都有自己的策略角色。策略角色和管理权限之间的另一个区别是,中心管理员可以拒绝用户在整个 Web 应用程序中的权限。
授权和身份验证
Windows SharePoint Services 3.0 支持在网站、列表、列表或库文件夹以及项目级别进行用户访问安全。安全管理在所有级别都是基于角色的,通过一致的基于角色的用户界面和用于分配对象权限的对象模型,在 Windows SharePoint Services 平台中提供一致的安全管理。因此,列表级、文件夹级或项目级安全实现了与网站级安全相同的用户模型,使得在整个网站中管理用户和组权限更加容易。Windows SharePoint Services 还支持对列表和文档库中包含的文件夹和项目进行独特权限。
授权是指 Windows SharePoint Services 通过确定哪些用户可以对给定对象执行特定操作来为网站、列表、文件夹或项目提供安全性的过程。授权过程假定用户已经过身份验证,身份验证是指 Windows SharePoint Services 识别当前用户的过程。Windows SharePoint Services 不实现自己的身份验证或身份管理系统,而是完全依赖于外部系统,无论是 Microsoft Windows 还是非 Windows 身份验证。
Windows SharePoint Services 支持以下类型的身份验证
- Windows:所有 Microsoft Internet Information Services (IIS) 和 Windows 身份验证集成选项,包括基本、摘要、证书、Windows NT LAN Manager (NTLM) 和 Kerberos。Windows 身份验证允许 IIS 为 Windows SharePoint Services 执行身份验证。
- ASP.NET 表单:一种非 Windows 身份管理系统,它使用可插入的 Microsoft ASP.NET 基于表单的身份验证系统。此模式允许 Windows SharePoint Services 与各种身份管理系统配合使用,包括外部定义的组或角色,例如轻量级目录访问协议 (LDAP) 和轻量级数据库身份管理系统。表单身份验证允许 ASP.NET 为 Windows SharePoint Services 执行身份验证,通常涉及重定向到登录页面。
- 委托:一种用于将最终用户凭据从受信任系统委托给 Windows SharePoint Services 的系统。这允许受信任的服务将用户身份传递给 Windows SharePoint Services 进行授权,传达当前用户是谁,而无需 Windows SharePoint Services 拥有该用户的凭据。
重要事项:如果您安装“Windows SharePoint Services 3.0 的基础设施更新 (KB951695)”,如果自定义解决方案在模拟暂停时调用 SharePoint 对象模型,则可能会失败。如果您使用 Windows 身份验证,并且您的代码从 IIS 工作进程调用 SharePoint 对象模型,则请求必须模拟调用用户的身份。Windows SharePoint Services 将 ASP.NET 配置为自动模拟调用用户,但如果您暂停模拟——例如,通过调用 Windows API 的 RevertToSelf
函数,或者通过调用 System.Security.Principal.WindowsIdentity.Impersonate
方法并将 IntPtr.Zero
作为用户令牌参数的值,您的代码可能会意外工作或失败。即使您的代码没有明确地恢复到自身,它也可能在 ASP.NET 恢复到自身之后被 ASP.NET 调用,例如在实现虚拟路径提供程序时发生的情况;如果您的代码不模拟调用用户,它可能无法正常运行。
注意:Windows SharePoint Services 不支持使用区分大小写的成员资格提供程序,并且无论成员资格提供程序如何,都对数据库中的所有用户使用不区分大小写的 SQL 存储。
基于表单的身份验证
基于表单的身份验证通过实现成员资格提供程序(定义用于识别和验证单个用户的接口)和角色管理器(定义用于将单个用户分组到逻辑组或角色的接口)在 Windows SharePoint Services 中提供自定义身份管理。给定用户名,角色提供程序系统返回用户所属的角色列表。成员资格提供程序从登录名和密码创建用户令牌,而角色管理器为当前用户创建一组组成员资格令牌。
角色管理器是可选的,因此如果自定义身份验证系统不支持组(例如 Windows Live ID),则不需要角色管理器。Windows SharePoint Services 每个 URL 区域 (SPUrlZone) 支持一个成员资格提供程序和一个角色管理器。ASP.NET 表单角色没有与其相关的固有权限。相反,Windows SharePoint Services 通过其策略和授权将权限分配给表单角色。
登录表单(login.aspx)由 Windows SharePoint Services 提供,并位于 _layouts 虚拟目录中(在 Local_Drive:\\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS 中)。此文件实现了用于收集用户凭据并将凭据缓存到 cookie 中的 ASP.NET Web 表单控件。
网站的中心管理员必须通过修改运行时虚拟服务器的 web.config 文件来注册成员资格提供程序和角色管理器。如果未注册任何提供程序,则 ASP.NET 基于表单的身份验证将无法工作。中心管理员必须同样更新 sptimer.exe.config 文件。
Windows SharePoint Services 使用标准 ASP.NET 2.0 角色提供程序接口来收集有关当前用户的组信息。出于身份验证目的,角色和组是相同的:一种将用户分组为逻辑集以进行授权的方式。每个 ASP.NET 角色都被 Windows SharePoint Services 视为域组。
有关 ASP.NET 提供的可插拔身份验证框架的信息,请参阅 ASP.NET 2.0 中的新安全功能。
委托身份验证
Windows SharePoint Services 支持将最终用户凭据从外部系统委托给 SharePoint 部署,允许受信任的服务在最终用户不直接连接到 Windows SharePoint Services 但通过另一个系统连接时传递用户身份进行授权。因此,Windows SharePoint Services 允许受信任的代码指定当前用户是谁,而无需 Windows SharePoint Services 拥有该用户的凭据。
通过委托身份验证,服务器将最终用户的身份验证委托给另一个服务器。客户端计算机向第一个服务器发出请求,第一个服务器又代表最终用户向第二个服务器发出一或多个请求。要成功,第一个服务器必须将最终用户的身份验证委托给第二个服务器,这需要以下两种信任关系之一
- 客户端信任第一个服务器的密码,例如,使用基本身份验证,或服务器端凭据存储,如 Microsoft Office SharePoint Server 2007 的可插拔单点登录机制或 Active Directory 联邦服务 (ADFS)。
- 第二个服务器信任第一个服务器以传递有效凭据以用于有效目的,例如,在服务器之间建立 Kerberos 约束委托信任关系。