如果没有将索赔映射到AD帐户,如何执行WIF /索赔模拟?

我需要在SharePoint 2010中为要求用户执行search模拟。 为了说明这一点,我想先说明如何使用Windows帐户来处理这个问题,然后讨论Claims / WIF。

Windows帐户

我可以为“经典”Windows集成身份validation用户使用以下操作:

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或更高版本的“域function级别”的域中的域帐户
  • 在本地机器上具有“作为操作系统的一部分”特权
  • 在本地机器上具有“在身份validation后模拟客户机”权限

(注意:如果任何人都可以想出如何解决当前帐户必须与冒充帐户在同一个域中的问题,那么我都非常期待)。

理赔账户

我想与索赔/ WIF账户一样。 这些帐户不一定与AD帐户相关联(我需要假设他们不是)。

有没有办法告诉STS,我想模拟一个特定的帐户,并为它给我适当的标记为该帐户? 我不会有我冒充的用户的密码。

引用SharePoint Brew我必须与通过WCF调用调用查询处理器的SharePoint Web前端(WFE)上运行的代码竞争。 我想这个WCF调用是在模拟用户的上下文中。

WFE(Server1)searchWeb部件与服务应用程序代理进行对话。 关联的search服务应用程序代理调用本地STS以获取用户的SAML令牌。 一旦收集到SAML令牌,search服务应用程序代理然后通过WCF调用来调用运行查询处理器的服务器。 我将调用这个服务器,“服务器2”。 服务器2收到传入的请求,并针对其本地STSvalidationSAML令牌。 一旦确认,服务器2连接到各种组件以收集,合并和安全修整search结果。 服务器2将修剪的search结果发送回服务器1,然后将其呈现给用户。

多一点研究正在引导我去看ActA和OnBehalf 。 我相信我会想要使用OnBehalfOf,但是我不确定哪一个都可以工作。 下面列出了我find的一些参考文献。 任何指导表示赞赏。

  • .NET框架开发人员中心 – 行为与行为
  • Pablo M. Cibraro(又名Cibrax)博客 – ActAs和OnBehalf在WIF上的支持
  • 编程Windows身份基础 (我有这本书)

我花了几个月的时间努力解决这个问题,花了很长时间与Microsoft SharePoint和WIF工程师一起工作后,得出的结论是,这是不可能的。 看来这个问题基本上是柯克所暗示的。 使用声明创build模拟会话时(例如,创buildSPClaim并转换为SPUser),SharePoint实际上并不会创build完全模拟的会话。 创build的会话实际上只能被对象模型所理解。 这意味着当您跨越Web应用程序的边界进入search时,由于您正在进入另一个应用程序域/进程空间,因此您正在有效地执行双跳。

我试图做一些类似于eppesuig的build议,并不能使其工作。 也许如果你写了一个全新的STS,可以生成一个SharePoint可以接受的可信的声明令牌,那么你可以使用ActAs令牌解决这个问题(SharePoint绝对不会接受OnBehalfOf令牌)。 但是,这样做的安全意义是相当重要的。 从理论上讲,它应该工作,但让自定义的STS和SharePoint混合/信任certificate是超出我的能力。 不过,我很乐意看到其他人尝试。

据我所知,你不能直接使用任何其他身份,但你的身份。 如果你想使用像OnBehalfOf这样的函数,你需要一个能够处理委托的STS。 所以STS会检查你的身份,然后允许使用委派的身份。