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 ?