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

Kir*_*ohn 35 sharepoint claims-based-identity windows-identity wif

我需要在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();
    }
}
Run Code Online (Sandbox Code Playgroud)

为了使上述功能得以实现,模拟帐户必须与当前用户位于同一个域中,我必须确保应用程序池所有者是:

  • 域中具有Windows 2003或更高版本"域功能级别"的域帐户
  • 在本地盒子上"充当操作系统的一部分"特权
  • 在本地方框上"在身份验证后模拟客户端"权限

(注意:如果有人可以弄清楚如何解决当前帐户必须与模拟帐户位于同一域中的问题,我很满意.)

索赔账户

我想对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,然后将其呈现给用户.

更多的研究使我看到ActAsOnBehalfOf.我相信我会想要使用OnBehalfOf,但我不确定是否会有效.我发现的一些参考文献列在下面.任何指导表示赞赏.

Lan*_*sby 9

我花了几个月的时间努力解决这个问题,经过很长一段时间与Microsoft SharePoint合作,WIF工程师得出的结论是,这是不可能的.似乎这个问题基本上是柯克提到的问题.使用声明创建模拟会话时(例如,创建SPClaim并转换为SPUser),SharePoint实际上并未创建完全模拟的会话.创建的会话实际上只能由对象模型理解.这意味着当您走出Web应用程序的边界并进入搜索时,您实际上正在执行双跃点,因为您将进入另一个应用程序域/进程空间.

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