Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IIS托管的ASP.NET和SharePoint服务器库-身份验证/安全问题_Asp.net_Iis_Sharepoint_Asp.net Web Api_Owin - Fatal编程技术网

IIS托管的ASP.NET和SharePoint服务器库-身份验证/安全问题

IIS托管的ASP.NET和SharePoint服务器库-身份验证/安全问题,asp.net,iis,sharepoint,asp.net-web-api,owin,Asp.net,Iis,Sharepoint,Asp.net Web Api,Owin,我目前正在从事一个项目,我们致力于针对SharePoint CSOM库尽可能多地开发 不幸的是,CSOM无法访问跨站点发布功能。因此,我们决定在目标SharePoint系统上部署ASP.NET Web API Web服务,该系统托管在单独的应用程序池中,并使用SSOM(服务器端SharePoint库) 池标识具有完全场管理员权限,并且web应用程序配置为使用Windows凭据和模拟 <configuration> <appSettings></appSettin

我目前正在从事一个项目,我们致力于针对SharePoint CSOM库尽可能多地开发

不幸的是,CSOM无法访问跨站点发布功能。因此,我们决定在目标SharePoint系统上部署ASP.NET Web API Web服务,该系统托管在单独的应用程序池中,并使用SSOM(服务器端SharePoint库)

池标识具有完全场管理员权限,并且web应用程序配置为使用Windows凭据和模拟

<configuration>
  <appSettings></appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Windows" />
    <identity impersonate="true" />
  </system.web>
  <system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <validation validateIntegratedModeConfiguration="false"/>
  </system.webServer>
</configuration>
其他信息:访问被拒绝。(HRESULT异常:0x80070005(E_访问被拒绝))

调用通过使用HttpClient执行:

var handler = new HttpClientHandler
{
    UseDefaultCredentials = true
};

var client = new HttpClient(handler)
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var response = Client.PostAsync("http://serviceadress/api/controller", jsonContent).Result;
此外,执行该进程的标识(控制台应用程序)与池也在运行的标识相同

我错过了什么?我真的不明白那个问题。特别是因为当我在本地运行OWIN主机中托管web服务时,一切都像一个符咒一样工作——为什么不在IIS中呢

OWIN主机的代码:

using (WebApp.Start<ControllerTest>("http://localhost:9000/"))
{
    // Create HttpCient and make a request to api/controller
    var client = new HttpClient
    {
        Timeout = TimeSpan.FromSeconds(300.0)
    };
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    var jsonPost = JsonConvert.SerializeObject(argument);

    var content = new StringContent(
        jsonPost,
        Encoding.UTF8,
        "application/json");

    var response = client.PostAsync(baseAddress + "api/controller", content).Result;
}
使用(WebApp.Start(“http://localhost:9000/"))
{
//创建HttpCient并向api/controller发出请求
var client=新的HttpClient
{
超时=TimeSpan.FromSeconds(300.0)
};
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
var jsonPost=JsonConvert.SerializeObject(参数);
var content=新的StringContent(
jsonPost,
Encoding.UTF8,
“应用程序/json”);
var response=client.PostAsync(baseAddress+“api/controller”,content)。结果;
}

好,问题已经解决。问题不在于IIS本身,而在于SharePoint ASP.NET上下文

在该上下文中运行时,必须确保以正确的方式处理跨站点脚本保护

E_ACCESSDENIED是由IIS中的错误配置导致的。web服务现在托管在与SharePoint相同的网站中

using (WebApp.Start<ControllerTest>("http://localhost:9000/"))
{
    // Create HttpCient and make a request to api/controller
    var client = new HttpClient
    {
        Timeout = TimeSpan.FromSeconds(300.0)
    };
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    var jsonPost = JsonConvert.SerializeObject(argument);

    var content = new StringContent(
        jsonPost,
        Encoding.UTF8,
        "application/json");

    var response = client.PostAsync(baseAddress + "api/controller", content).Result;
}