我创建了一个运行在不同机器/ IIS上的Web服务,而不是我的SharePoint(2013)应用程序节点(双跃点问题开始)。我将此Web服务公开给我们公司的其他服务。
下面的代码段将使用专用凭据成功检索SharePoint列表(即" sp_admin_user")。
在我的网络服务中,我可以检索调用它的用户的用户名(无密码ofc),该用户也按规则存在于SharePoint中。
我的问题:我如何更改以下代码以便使用上述用户名进行模拟?
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string get_sp_list()
{
SPLists.Lists myservice = new SPLists.Lists();
myservice.Credentials = new System.Net.NetworkCredential( "sp_admin_user", "password123", "domain" );
myservice.Url = "https://sharepoint.company.com/sites/testground/_vti_bin/Lists.asmx";
[.. setting of variables ..]
System.Xml.XmlNode n = myservice.GetListItems(
sidList,
sidView,
query,
viewFields,
rowLimit,
queryOptions,
null
);
[.. compose json ..]
return json;
}
答案 0 :(得分:1)
您可以在没有密码的情况下模拟的唯一用户是SharePoint IIS应用程序池用户(通常是NETWORK SERVICE)。若要模拟正在访问SharePoint页面的用户,运行SharePoint的计算机需要具有对外部服务的委派权限。你可以阅读它here。这完全是关于安全限制的。
我建议你拒绝冒充方法,更容易处理密码,匿名网络服务电话或发明别的东西。
您可以像这样冒充用户:
using (var ctx = WindowsIdentity.Impersonate(IntPtr.Zero))
{
//external web service call as "COMPUTER_NAME\NETWORK_SERVICE" user
}
如果您有密码,也可以获得真实的用户令牌(不是IntPtr.Zero)。