我需要在 SharePoint 2010 中为声明用户执行搜索模拟。为了把它放在上下文中,我想先说明我如何让它与 Windows 帐户一起使用,然后讨论 Claims / WIF。
Windows 帐户
我可以使用以下方法为“经典”Windows 集成身份验证用户执行此操作:
WindowsImpersonationContext wic = null;
try
{
WindowsIdentity impersonatedUser = new WindowsIdentity("john.doe@mydomain");
wic = impersonatedUser.Impersonate();
// do impersonated work here...
// in my case this is a SharePoint KeywordQuery
}
finally
{
if (wic != null)
{
wic.Undo();
}
}
要使上述工作正常,模拟帐户必须与当前用户位于同一域中,并且我必须确保应用程序池所有者是:
- 域中具有 Windows 2003 或更高版本“域功能级别”的域帐户
- 在本地机器上具有“充当操作系统的一部分”权限
- 在本地机器上具有“身份验证后模拟客户端”权限
(注意:如果有人能弄清楚如何解决当前帐户必须与模拟帐户位于同一域中的问题,我会全力以赴。)
理赔账户
我想对索赔 / WIF 帐户做同样的事情。这些帐户不一定与 AD 帐户相关联(我需要假设它们不是)。
有没有办法告诉 STS 我想模拟一个特定的帐户并让它给我该帐户的适当令牌?我不会有我正在模拟的用户的密码。
引用SharePoint Brew我必须处理在 SharePoint Web 前端 (WFE) 上运行的代码,该前端通过 WCF 调用调用查询处理器。我希望 WCF 调用在模拟用户的上下文中。
WFE (Server1) 的搜索 Web 部件与服务应用程序代理对话。关联的搜索服务应用程序代理调用本地 STS 以获取用户的 SAML 令牌。收集 SAML 令牌后,搜索服务应用程序代理将通过 WCF 调用调用运行查询处理器的服务器。我将此服务器称为“服务器 2”。服务器 2 接收传入请求并根据其本地 STS 验证 SAML 令牌。验证后,服务器 2 连接到各种组件以收集、合并和安全修剪搜索结果。服务器 2 将修剪后的搜索结果发送回服务器 1,然后将其呈现给用户。
更多的研究使我转向查看ActAs和OnBehalfOf。我相信我会想使用 OnBehalfOf,但我不确定两者都行得通。下面列出了我找到的一些参考资料。任何指导表示赞赏。