sharepoint - 在不将版权声明映射到AD帐户的情况下,如何执行WIF/版权声明模拟?

标签 sharepoint claims-based-identity windows-identity wif

我需要在SharePoint 2010中为Claims用户执行搜索模拟。为了说明这一点,我想先说明一下如何使它与Windows帐户一起使用,然后讨论Claims / WIF。

Windows帐户

我可以使用以下方式为“经典” Windows Integrated Authenticated用户执行此操作:

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或更高版本的“域功能级别”的域中的域帐户
  • 在本地框中具有“充当操作系统的一部分”特权
  • 对本地框
  • 具有“身份验证后模拟客户端”特权

    (请注意:如果有人能解决如何解决当前帐户必须与模拟帐户在同一个域中的问题,我将不知所措。)

    索偿帐户

    我想对Claims / WIF帐户执行相同的操作。这些帐户的不一定是,它们不一定与AD帐户关联(我需要假定它们没有关联)。

    有没有办法告诉STS我要模拟一个特定帐户,并为其提供适当的 token 给我?我没有我要模拟的用户的密码。

    引用SharePoint Brew我必须应对在SharePoint Web前端(WFE)上运行的代码进行竞争,该代码通过WCF调用来调用查询处理器。我希望该WCF调用在模拟用户的上下文中进行。

    The WFE's (Server1) search web part talks to service application proxy. The associated search service application proxy calls the local STS to get a SAML token for the user. Once SAML token is collected, the search service application proxy then calls a server running the Query Processor via WCF call. I'll call this server, "Server 2". Server 2 receives the incoming request and validates the SAML token against its local STS. Once validated, Server 2 connects to various components to gather, merge, and security trims search results. Server 2 sends the trimmed search results back to Server 1 which are then presented to the user.



    更多的研究使我着眼于ActAsOnBehalfOf。我相信我想使用OnBehalfOf,但是我不确定两者都行不通。我找到的一些引用文献在下面列出。任何指导表示赞赏。
  • .NET Framework Developer Center - Act As vs. On BehalfOf
  • Pablo M. Cibraro (aka Cibrax) blog - ActAs and OnBehalfOf support in WIF
  • Programming Windows Identity Foundation(我有书)
  • 最佳答案

    我花了几个月的时间来尝试解决这个问题,而在与Microsoft SharePoint和WIF工程师一起工作了很长时间之后,我得出结论认为这是不可能的。看来,这个问题基本上就是柯克所指的。当使用Claims创建模拟 session (例如,创建SPClaim并转换为SPUser)时,SharePoint实际上并没有创建完全模拟的 session 。创建的 session 实际上只能由对象模型理解。这意味着,当您跳出Web应用程序的边界并进入搜索时,由于您进入了另一个应用程序域/进程空间,因此有效地实现了双跳。

    我试图做类似于eppesuig的建议,但无法使其正常工作。 也许是,如果您编写了一个全新的STS,它可以生成SharePoint可以接受的受信任的声明 token ,那么您也许可以使用ActAs token 解决此问题(SharePoint绝对不会接受OnBehalfOf token )。但是,这样做的安全隐患令人担忧。从理论上讲,它应该起作用,但是事实证明,使自定义STS和SharePoint相互混合/信任是我无法实现的。不过,我希望看到其他人尝试一下。

    关于sharepoint - 在不将版权声明映射到AD帐户的情况下,如何执行WIF/版权声明模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5171460/

    相关文章:

    asp.net-mvc - ASP.NET Identity 中角色与声明的最佳实践

    c# - 从 ASP.NET 页面中获取 Windows 登录

    c# - .Net Core 模拟无法与 Process.Start 一起使用

    javascript - jQuery将点击事件绑定(bind)到每次页面刷新时数字不断增加的id

    可视化 Web 部件中的 JQuery SharePoint Foundation

    c# - asp.net core如何向用户添加声明

    c# - System.IdentityModel.Policy.IAuthorizationPolicy 过时了吗?

    c# - 如何从 ASP.NET 页面获取当前登录的 Windows 帐户?

    jquery - 获取 400 错误请求 SharePoint 2013 Rest API

    sharepoint - 第一列作为 SharePoint View 中的链接