SharePoint 2010 中的模拟





5.00/5 (4投票s)
SharePoint 2010 中身份冒充的方法。
引言
在本文中,我们将探讨 SharePoint 2010 中的身份冒充方法。
什么是身份冒充?
身份冒充是一种安全特性,它能够控制代码执行所使用的身份。 身份冒充具有以下优势:
- 通过低权限用户运行高权限代码
- 以其他用户的身份记录更改
SharePoint 2010 中有哪些身份冒充方法?
SharePoint 2010 提供了以下身份冒充方法:
RunWithElevatedPrivileges
以系统帐户用户身份冒充- 将用户令牌传递到 SPSite 中,以冒充特定用户
- 使用 Windows API
注意:系统帐户 (SHAREPOINT\system) 是 SharePoint 的应用程序池用户。 如果您在客户端操作系统 (Windows 7 / Vista) 上使用开发人员安装,则帐户名称将不同。
现在让我们看看如何使用上述方法。
RunWithElevatedPrivileges
- 传递用户令牌
这是最常用的身份冒充方法。
SPSecurity.RunWithElevatedPrivileges(() =>
{
// Your code here
});
注意:在使用 RunWithElevatedPrivileges
的情况下,系统帐户用于执行活动。
SPUserToken
是我们用于此目的的服务器模型。 此类可以表示每个用户的令牌。 用户令牌实际上是一个字节数组。
SPUser
类包含名为 UserToken
的属性。 将 SPUserToken
实例传递到 SPSite
构造函数中可以冒充特定用户。
例如:new SPSite(UrlText.Text, user.UserToken);
要枚举站点中的所有用户,可以使用 web.Users
属性。
例如:web.Users
运行代码
附带的源代码包含以下示例:
- 枚举用户
- 请注意,我使用的站点只有两个用户。
- 当前登录的用户是管理员。
- 冒充每个用户创建数据
- 使用
RunWithElevatedPrivileges
创建数据
要枚举给定网站的用户,可以使用以下代码:
using (SPSite site = new SPSite(UrlText.Text))
{
using (SPWeb web = site.OpenWeb())
{
SPContext context = SPContext.GetContext(web);
var users = context.Web.Users;
// Display to grid
usersGrid.DataSource = users.Cast<SPUser>().ToList<SPUser>();
}
}
单击按钮后,我们可以看到如下所示的用户:
现在我们可以尝试冒充每个用户创建列表项。 创建的项目将具有系统属性 > 创建者设置为不同的用户
以下代码执行相同的操作:
int count = 1;
foreach (SPUser user in web.Users)
{
SPSite newSite = new SPSite(UrlText.Text, user.UserToken); // Impersonate
SPWeb newWeb = newSite.OpenWeb();
SPListItem item = newWeb.Lists[ListName].AddItem();
item["Title"] = "Item " + count++.ToString();
item.Update();
newSite.Dispose();
newWeb.Dispose();
}
运行上述代码后,我们可以看到创建的项目如下所示:
请注意,每行的“创建者”属性不同。
注意:如果上述任何用户没有写入权限,将抛出异常。
现在我们可以尝试使用 RunWithElevatedPrivileges
块创建列表项。 在这种情况下,用户被冒充为系统帐户。
相同的代码如下所示:
SPSecurity.RunWithElevatedPrivileges(() =>
{
using (SPSite site = new SPSite(UrlText.Text))
{
using (SPWeb web = site.OpenWeb())
{
SPListItem item = web.Lists[ListName].AddItem();
item["Title"] = "Item created with RunWithElevatedPriveleges";
item.Update(); // Item will be created with System Account
ShowData(web);
}
}
});
我们可以看到,新项目是使用系统帐户创建的,如下所示:
参考文献
摘要
在本文中,我们探讨了 SharePoint 2010 中的两种身份冒充方法。 附带的代码包含我们讨论的示例。