我需要在SharePoint 2010中为声明用户执行搜索模拟。为了说明这一点,我想首先说明如何使用Windows帐户,然后讨论Claims / WIF。
我可以使用以下方法为“经典”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();
}
}
要使上述功能正常运行,模拟帐户必须与当前用户位于同一个域中,我必须确保应用程序池所有者是:
(注意:如果有人能够弄清楚如何解决当前帐户必须与模拟帐户位于同一域中的问题,我很满意。)
我想对Claims / WIF帐户做同样的事情。这些帐户不必然与AD帐户相关联(我需要假设它们不是)。
有没有办法告诉STS我想冒充某个特定帐户并让它为该帐户提供适当的令牌?我没有我冒充用户的密码。
引用SharePoint Brew我必须应对在SharePoint Web前端(WFE)上运行的代码,该代码通过WCF调用调用查询处理器。我希望WCF调用位于模拟用户的上下文中。
WFE(Server1)搜索Web部件与服务应用程序代理进行通信。关联的搜索服务应用程序代理调用本地STS以获取用户的SAML令牌。收集SAML令牌后,搜索服务应用程序代理将通过WCF调用调用运行查询处理器的服务器。我将这个服务器称为“服务器2”。服务器2接收传入请求并根据其本地STS验证SAML令牌。经过验证,Server 2连接到各种组件以收集,合并和安全性修剪搜索结果。服务器2将修剪后的搜索结果发送回服务器1,然后将其呈现给用户。
更多的研究使我开始关注ActAs和OnBehalfOf。我相信我会想要使用OnBehalfOf,但我不确定它们是否会起作用。我发现的一些参考文献列在下面。任何指导都表示赞赏。
答案 0 :(得分:9)
我花了几个月的时间努力解决这个问题,经过很长一段时间与Microsoft SharePoint合作,WIF工程师得出的结论是,这是不可能的。似乎这个问题基本上是柯克提到的问题。使用声明创建模拟会话时(例如,创建SPClaim并转换为SPUser),SharePoint实际上并未创建完全模拟的会话。创建的会话实际上只能由对象模型理解。这意味着当您走出Web应用程序的边界并进入搜索时,您实际上正在执行双跃点,因为您将进入另一个应用程序域/进程空间。
我尝试做类似于eppesuig建议的事情而无法让它发挥作用。 或许如果您编写了一个可以生成SharePoint可接受的受信任声明令牌的全新STS,那么您可以使用ActAs令牌解决此问题(SharePoint绝对不会接受OnBehalfOf令牌)。但是,这样做的安全隐患相当令人担忧。理论上它应该可以工作但是让自定义STS和SharePoint混合/信任被证明超出了我的能力范围。不过,我很乐意看到其他人试一试。
答案 1 :(得分:0)
根据我的理解,除了你的以外,你不能直接使用任何其他身份。如果你想使用像OnBehalfOf这样的函数,你需要一个能够处理委托的STS。因此,STS将检查您的身份,然后允许使用委托身份。