Sharepoint 上的模拟全文搜索(无密码)

Posted

技术标签:

【中文标题】Sharepoint 上的模拟全文搜索(无密码)【英文标题】:Impersonated Full Text Search on Sharepoint (without the password) 【发布时间】:2013-12-02 17:12:40 【问题描述】:

我试图在模拟特定用户时执行搜索查询。

目标是拥有一个接收用户登录名(通过查询字符串或请求标头)的 Web 服务,执行全文查询并返回结果,同时遵守安全调整。

换一种说法,我只需要获得模拟用户有权看到的结果。

我当前的代码是:

            var spUser = SPContext.Current.Web.EnsureUser(loginName);

            HttpRequest request = new HttpRequest("", SPContext.Current.Web.Url, "");

            var web = SPContext.Current.Web;

            HttpContext.Current = new HttpContext(request, new HttpResponse(new StringWriter(CultureInfo.CurrentCulture)));
            if (HttpContext.Current.Items.Contains("HttpHandlerSPWeb"))
            
                HttpContext.Current.Items["HttpHandlerSPWeb"] = web;
            
            else
            
                HttpContext.Current.Items.Add("HttpHandlerSPWeb", web);
            

            WindowsIdentity identity = WindowsIdentity.GetCurrent();
            typeof(WindowsIdentity).GetField("m_name", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(identity, spUser.LoginName);

            HttpContext.Current.User = new GenericPrincipal(identity, new string[0]);
            identity.Impersonate();

            //execute query here

基本上我会在实例化 FullTextQuery 之前替换当前身份,但这与什么都不做一样,因为结果只会根据真实登录的用户而变化,而不是被模拟的用户。

这里有什么提示吗?

提前致谢, 干杯!

【问题讨论】:

你有没有试过调用 WindowsIdentity.GetCurrent();模仿后在你的代码中?如果是,那么它返回什么? 另外你可能想看看自定义安全修剪blogs.msdn.com/b/security_trimming_in_sharepoint_2013 嗨,模拟后我得到了我想模拟的用户。在 SPWeb 对象内时有效,但由于我调用搜索服务应用程序,此身份似乎恢复为登录用户。 能否请您在调用搜索引擎的位置发布代码? 嗨,在模拟之后我执行如下查询:gist.github.com/myTeamWorks/7765895Thanks 【参考方案1】:

当我以提升的权限运行时,我能够通过模拟来使其工作。在这里查看我的帖子:http://vishalseth.com/post/2013/11/05/Impersonated-Searching-against-SharePoint.aspx

【讨论】:

您好,欢迎来到 Stack Overflow。请注意,虽然您的答案保留在这里,但链接及其内容可能会更改或被删除。请编辑您的代码以包含该链接中的相关信息。

以上是关于Sharepoint 上的模拟全文搜索(无密码)的主要内容,如果未能解决你的问题,请参考以下文章

全文搜索引擎选 ElasticSearch 还是 Solr?

全文搜索引擎选ElasticSearch还是Solr?

全文搜索引擎到底选 ElasticSearch 还是 Solr ?

windows 7 打开sharepoint 2007上的office文档需要输入用户名和密码

Elasticsearch 全教程--入门

搜索引擎:Elasticsearch与Solr