2011-03-02 47 views
35

我需要在SharePoint 2010中为声明用户执行搜索模拟。为了说明这一点,我想先说明我如何使用Windows帐户,然后讨论Claims/WIF。如何在没有将索赔映射到AD帐户的情况下执行WIF /索赔模拟?

Windows帐户

我可以使用“经典” Windows集成身份验证的用户这样做:

WindowsImpersonationContext wic = null; 
try 
{ 
    WindowsIdentity impersonatedUser = new WindowsIdentity("[email protected]"); 
    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的(服务器1)搜索Web部件与服务应用程序代理对话。相关联的搜索服务应用程序代理调用本地STS以获取用户的SAML令牌。一旦收集到SAML令牌,搜索服务应用程序代理就会通过WCF呼叫调用运行查询处理器的服务器。我会打电话给这个服务器,“服务器2”。服务器2收到传入的请求并根据其本地STS验证SAML令牌。一旦确认,服务器2连接到各种组件以收集,合并和安全修整搜索结果。服务器2将修剪的搜索结果发送回服务器1,然后将其呈现给用户。

多一点研究导致我看着ActAsOnBehalfOf。我相信我会想使用OnBehalfOf,但我不确定这两种方法都可以工作。下面列出了我找到的一些参考文献。任何指导表示赞赏。

+0

关于您用于执行关键字查询搜索的代码的任何建议?我可以做一些帮助:) – 2012-05-10 16:16:50

回答

9

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

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

0

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